• C#动态实体集的反序列化(动态JSON反序列化)


    一、使用场景

    我们在将 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 + "
    Value:"  + temp_item.Value );
        Console.WriteLine("------------------------------------------------------------------------");
    
        //TODO: 下面的步骤大家应该都知道了,如果要获取 List<EntityModel> 类型,直接把value 序列化就可以。
        //var temp_list = JsonConvert.DeserializeObject<List<EntityModel>>(temp_item.Value.ToString());
    }

    这里写图片描述

    这里写图片描述

  • 相关阅读:
    vue 定时器销毁的问题
    学习flutter,先学dart并安装dart sdk
    vue element-ui table 列表倒计时
    微信小程序使用symbol方式使用阿里图标库
    前端处理后台返回的图片控制台输出是乱码
    uniapp 扩展组件抽屉的使用
    C# 连接MYsql 报错Authentication plugin 'caching_sha2_password' cannot be loaded
    IE上传文件报错
    C#调用JavaHttp接口抛500内部错误
    easy ui 中grid级联操作
  • 原文地址:https://www.cnblogs.com/netlock/p/13191651.html
Copyright © 2020-2023  润新知