C#動態實體集的反序列化(動態JSON反序列化)
阿新 • • 發佈:2020-12-23
一、使用場景
我們在將 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());
}