使用 Newtonsoft.Json 操作 JSON 字符串
2017-10-20 16:46
459 查看
对 Newtonsoft.Json 的应用可以说司空见惯,在 JSON 格式层级不深的情况下使用很方便,但有时遇到的 JSON 字符串层级非常多,且真正需要的数据往往都“埋”得很深,这时如果去定义一个与之对应的多层嵌套实体类就显得不划算,下面通过实例来演示如何一步到位抓取到期望的数据(集)。
一、把实体类转化为 JSON 字符串
1. 为实体类赋值
SenderFromMQSearch senderFromMQSearch = new SenderFromMQSearch(); senderFromMQSearch.StartTime = new DateTime(2017, 9, 10); senderFromMQSearch.EndTime = new DateTime(2017, 9, 10); senderFromMQSearch.FlowType = "DataSender";
2. 序列化
通过简单的序列化后,可以将 C# 实体类转换为 JSON 格式的字符串string paramsText = JsonConvert.SerializeObject(senderFromMQSearch);
转换后其格式类似如下:
{\"StartTime\":\"2017-09-10\", \"EndTime\":\"2017-09-10\", \"FlowType\":\"DataSender\", \"SiteNo\":\"\"}
二、提取 JSON 字符串中部分属性的值
JSON 属性的值有多种类型,比如 String、Array 等,通过属性提取到对应的值时需要特别留意这些类型,从而做出正确地转化。比如现借助上面的查询实体类,以及前文介绍的 Chloe.ORM 查询到一段结果集,其形式如同这样一段 JSON 字符串:
{ "Status": true, "Msg": "成功", "Data": { "SiteData": [ { "SiteNo": "200012", "SiteName": "上海公司", "Total": 100 }, { "SiteNo": "214001", "SiteName": "无锡分销部", "Total": 200 } ] } }
并将该字符串存储在变量 resultText 中。
1. JObject
将其转化为 JSON 对象,即 JObject:JObject jObj = JObject.Parse(resultText);
接着可以尝试获取"Data"属性的值:
jObj["Data"].ToString();
其值的形式为:
{ "SiteData": [ { "SiteNo": "200012", "SiteName": "上海公司", "Total": 100 }, { "SiteNo": "214001", "SiteName": "无锡分销部", "Total": 200 } ] }
2. JArray
这时发现,真正期望的值其实还在属性“SiteData”里面,那不如索性一步到位:jObj["Data"]["SiteData"].ToString();
此时,其值的形式为:
[ { "SiteNo": "200012", "SiteName": "上海公司", "Total": 100 }, { "SiteNo": "214001", "SiteName": "无锡分销部", "Total": 200 } ]
可见这是一个数组格式的字符串,可以尝试将其转化为数组对象,即 JArray:
JArray siteDataArray = JArray.Parse(jObj["Data"]["SiteData"].ToString());
3. JArray 转换为 List
对于该数组中的每一个对象,都存在三个属性:SiteNo、SiteName,以及 Total,为了更方便地操作这些数据,可以考虑泛型集合。首先来定义实体类:
public class SiteInfo { public string SiteNo { get; set; } public string SiteName { get; set; public int Total { get; set; } }
可以看出,实体类的属性实际上与数组中每一个对象的属性相对应。
接着来遍历一下这个数组,对于数组中的每一个对象都会有一个实体对象(siteInfo)与之对应,然后将该实体对象(siteInfo)逐个地添加至泛型集合(siteInfoList)即可。
List<SiteInfo> siteInfoList = new List<SiteInfo>(); foreach (var item in siteDataArray) { SiteInfo siteInfo = new SiteInfo(); siteInfo.SiteNo = item["SiteNo"].ToString(); siteInfo.SiteName = item["SiteName"].ToString(); siteInfo.Total = (int)item["Total"]; siteInfoList.Add(siteInfo); }
至此,核心数据就倒腾到泛型集合中,接下来借助 Linq 就可以玩各种花样了。
相关文章推荐
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
- 使用jQuery对表格的操作,组织JSON字符串
- c#操作json数据使用newtonsoft.json
- 关于使用newtonsoft 解析json字符串,即是将json字符串转换成json对象的写法
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
- c#操作json使用newtonsoft.json
- 使用Java操作JSON字符串对象
- 使用Newtonsoft.Json进行JSON反序列化操作
- vs2005中使用Newtonsoft.Json.dll操作json
- VB.NET用Newtonsoft.Json操作json字符串
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
- 使用Java JSONObject操作JSON字符串对象
- Newtonsoft.Json.4.5.0 序列化与反序列化json字符串使用方法总结
- c#操作json数据使用newtonsoft.json
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
- 使用Java操作JSON字符串对象
- c# 使用 Newtonsoft.Json 序列化json字符串以及,反序列化对象
- 使用json-lib将java对象转换成json字符串