一、使用场景

我们在将 JSON 反序列化实体集的时候,如果字段是固定的,那么我们序列化非常简单,对应字段写的实体集就可以了。比如下面这种:

{
"data":[
{
"houseid": "210166268",
"city": "唐山",
"pv": "1"
}
],
"message": "Success"
}
 

但是我们如何处理 动态的JSON数据(没有固定字段),比如下面结构:,是不是懵逼了呀,因为有一个时间节点,它是不固定的,下面,我们就开始介绍如何 反序列化下面的格式。

//注意下面的时间节点不固定,我们无法对应指定字段
{
"content": {
"20180123": [
{
"houseid": "210166268",
"city": "唐山",
"pv": "1"
},
{
"houseid": "210181300",
"city": "唐山",
"pv": "1"
}
],
"20180124": [
{
"houseid": "210166268",
"city": "唐山",
"pv": "1"
}
]
},
"message": "Success"
}

二、动态实体集反序列化

需要引入: Newtonsoft.Json。

假设我们要把 上面的每天的房源信息(houseid, city, pv) 序列化成一个列表。 代码如下:

//最终目标格式
public class DataModel
{ //日期字符串
public string DateStr { get; set; } //每天信息列表
public List<EntityModel> EntityList { get; set; }
} //数据模型
public class EntityModel
{
public string HouseId { get; set; } public string City { get; set; } public string PV { get; set; } public override string ToString()
{
return HouseId +City +PV;
}
}

2.1 处理结果

2.2 处理逻辑

//解析
Newtonsoft.Json.Linq.JObject resultObject = Newtonsoft.Json.Linq.JObject.Parse(resultStr); //转换成列表(取得Content)
List<Newtonsoft.Json.Linq.JToken> listJToken = resultObject["content"].Children().ToList(); //遍历
foreach (var item in listJToken)
{
//转成键值对格式
var temp_item = (Newtonsoft.Json.Linq.JProperty)item;
Console.WriteLine("Name:" + temp_item.Name + "\nValue:" + temp_item.Value );
Console.WriteLine("------------------------------------------------------------------------"); //TODO: 下面的步骤大家应该都知道了,如果要获取 List<EntityModel> 类型,直接把value 序列化就可以。
//var temp_list = JsonConvert.DeserializeObject<List<EntityModel>>(temp_item.Value.ToString());
}

最新文章

  1. test 2016-12-6
  2. IDEA内存溢出问题:
  3. Oracle:ORA-00955: name is already used by an existing object
  4. ASP.NET 缓存
  5. 【Python】[函数式编程]高阶函数,返回函数,装饰器,偏函数
  6. Information
  7. 高性能文件缓存key-value存储—Memcached
  8. JAVA CAS原理深度分析
  9. c语言参数类型
  10. Channel 详解
  11. wuzhicms短信API 实例调用
  12. 【html】【1】html的简单结构
  13. python基础--杂项
  14. Asp.net mvc4 + HighCharts + 柱状图
  15. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡
  16. [国嵌攻略][152][I2C总线介绍]
  17. CSS3盒子模型
  18. C++版 - 剑指Offer 面试题35:第一个只出现一次的字符 解题报告(华为OJ034-找出字符串中第一个只出现一次的字符)
  19. ERP口碑后付关于如何设置后厨小票打印时间的问题解决方法
  20. Codeforces 1043F(容斥+dp)

热门文章

  1. Thread.start() ,它是怎么让线程启动的呢?
  2. 【python】Matplotlib作图常用marker类型、线型和颜色
  3. Linux 系统故障排查,这里看过来
  4. 03Python网络编程系列之服务端
  5. Docker一些基本操作
  6. ASP.Net Core 3.1 使用gRPC入门指南
  7. Django----setting.py配置
  8. PyQt(Python+Qt)学习随笔:QDateTimeEdit日期时间编辑部件
  9. PyQt(Python+Qt)学习随笔:字体writingSystem、ProportionalFonts、MonospacedFonts的含义以及QFontComboBox字体组合框详解
  10. Python中函数是否能使用全局变量?