net利用Newtonsoft.Json解析json字符串

需要先引用命名空间
Newtonsoft.Json 和 Newtonsoft.Json.Linq
1.可自行网上下载 Newtonsoft.Json.dll ,在项目中添加引用
2.或者是直接使用VS的内置NuGet包管理器中搜索Newtonsoft.Json 安装到指定项目

1.针对简单的json串

需要处理的json串
“{
“message”: “操作成功”,
“data”: “This is a data”,
“success”: “true”
}”

解析方法:

string json = "{\"message\": \"操作成功\",\"data\": \"This is a data\",\"success\": \"true\"}";
Object obj = JsonConvert.DeserializeObject(json);
Newtonsoft.Json.Linq.JObject js = obj as Newtonsoft.Json.Linq.JObject;//把上面的obj转换为 Jobject对象
string data = js["data"].ToString();

补充:

dynamic model = JObject.Parse("{\"value\":\"巧克力1\",\"color\":\"#173177\"}");
string sss = model.value;

 不知道key的情况下用下面程序拿到key和value

JObject json = (JObject)JsonConvert.DeserializeObject(listdata);
string openId = json["OpenID"].ToString();
foreach (var jp in json)
{
string key = jp.Key.ToString();
string val = jp.Value.ToString();
}

2.针对简单的json串数组
需要处理的json串数组
[
{
“deviceID”: “110722”,
“discloseTime”: “2019-03-08 01:00:00”,
“projectId”: “24”
},
{
“deviceID”: “110732”,
“discloseTime”: “2019-03-08 15:40:12”,
“projectId”: “24”
},
{
“deviceID”: “110735”,
“discloseTime”: “2019-03-08 16:40:12”,
“projectId”: “24”
}
]
解析:

string json = "[{\"deviceID\": \"110722\",\"discloseTime\": \"2019-03-08 01:00:00\",\"projectId\": \"24\"},{\"deviceID\": \"110732\",\"discloseTime\": \"2019-03-08 15:40:12\",\"projectId\": \"24\"},{\"deviceID\": \"110735\",\"discloseTime\": \"2019-03-08 16:40:12\",\"projectId\": \"24\"}]";
Object obj = JsonConvert.DeserializeObject(json);
Newtonsoft.Json.Linq.JArray jarray = obj as Newtonsoft.Json.Linq.JArray;//把上面的obj转换为 Jobject对象
List<Body> bodyList = new List<Body>();
for (int i = 0; i < jarray.Count; i++)
{
string listdata = jarray[0].ToString();
Object obj1 = JsonConvert.DeserializeObject(listdata);
Newtonsoft.Json.Linq.JObject js1 = obj1 as Newtonsoft.Json.Linq.JObject;//把上面的obj转换为 Jobject对象
Body body = new Body
{
DeviceID= js1["deviceID"].ToString(),
DiscloseTime = js1["discloseTime"].ToString(),
ProjectId = js1["projectId"].ToString()
};
bodyList.Add(body);
}

3.针对复合的json串
需要处理的json数据
{
“message”: “操作成功”,
“data”: [
{
“deviceID”: “110722”,
“discloseTime”: “2019-03-08 01:00:00”,
“projectId”: “24”
},
{
“deviceID”: “110732”,
“discloseTime”: “2019-03-08 15:40:12”,
“projectId”: “24”
},
{
“deviceID”: “110735”,
“discloseTime”: “2019-03-08 16:40:12”,
“projectId”: “24”
}
],
“success”: ”true“
}

解析:

List<Body> bodyList = new List<Body>();
Object obj = JsonConvert.DeserializeObject(json);
Newtonsoft.Json.Linq.JObject js = obj as Newtonsoft.Json.Linq.JObject;//把上面的obj转换为 Jobject对象
JArray jarray = (JArray)js["data"];
for (int i = 0; i < jarray.Count; i++)
{
string data = jarray[0].ToString();
Object obj1 = JsonConvert.DeserializeObject(data);
Newtonsoft.Json.Linq.JObject js1 = obj1 as Newtonsoft.Json.Linq.JObject;//把上面的obj转换为 Jobject对象
Body body = new Body
{
DeviceID = js1["deviceID"].ToString(),
DiscloseTime = js1["discloseTime"].ToString(),
ProjectId = js1["projectId"].ToString()
};
bodyList.Add(body);
}

补充:拆分单条不知道属性名称 的时候 (来源:https://blog.csdn.net/yo548720570/article/details/10459041#)

JObject _jObject = JObject.Parse("{'ID':'001','Mark':'Hello Word'}");
StringBuilder str = new StringBuilder();
foreach (var item in _jObject)
{
str.Append(item.Key + ":" + item.Value+",");
}

//结果: ID:001,Mark:Hello Word, //上面这种遍历 一般情况下 是用在 不知道属性名称 的时候, //如果 知道属性名称 直接用 _jObject["ID"].ToString(),或者_jObject["ID"].Value<string>() 就行了。 /**************************************/

_jObject = JObject.Parse("{'Goods':{'GoodsId':'111',GoodsName:'Adidas'},'Mark':'2589'}"); var _value = _jObject["Goods"]["GoodsId"].ToString(); //取值 结果 : 111

JArray 的遍历简单说来,你可以把 JArray 看做是 JObject 的集合,那么遍历就简单了

foreach (JObject items in _JArray) {

  foreach (var item in items) {

    str.Append(item.Key + ":" + item.Value + ",");

  }

}


————————————————
版权声明:本文为CSDN博主「MelanceXin」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/q672405097/article/details/88356515

posted @ 2020-02-07 10:21  立扬  阅读(1291)  评论(0编辑  收藏  举报
……