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 + "\nValue:"  + temp_item.Value );
    Console.WriteLine("------------------------------------------------------------------------");

    //TODO: 下面的步驟大家應該都知道了,如果要獲取 List<EntityModel> 類型,直接把value 序列化就可以。
    //var temp_list = JsonConvert.DeserializeObject<List<EntityModel>>(temp_item.Value.ToString());
}

 

這里寫圖片描述

這里寫圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM