一、使用場景
我們在將 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()); }