Json反序列化有兩種方式【本人】,一種是生成實體的,方便處理大量資料,複雜度稍高,一種是用匿名類寫,方便讀取資料,較為簡單。
使用了Newtonsoft.Json,可以自行在nuget中匯入
Json源資料:
var data = "{`jingdong_ldop_receive_trace_get_responce`:{`code`:`0`,`querytrace_result`:{`data`:[{`opeTitle`:`快遞簽收`,`opeRemark`:`貨物已交付京東物流`,`opeTime`:`2011/04/17 18:23:20`,`opeName`:`京東快遞`,`waybillCode`:`bc00000001`},{`opeTitle`:`站點驗貨`,`opeRemark`:`貨物已分配,等待配送`,`opeTime`:`2011/04/23 08:29:56`,`opeName`:`京東快遞`,`waybillCode`:`bc00000001`},{`opeTitle`:`配送員收貨`,`opeRemark`:`配送員開始配送,請您準備收貨,`,`opeTime`:`2011/04/23 08:36:28`,`opeName`:`京東快遞`,`waybillCode`:`bc00000001`},{`opeTitle`:`妥投`,`opeRemark`:`貨物已完成配送,感謝您選擇京東物流`,`opeTime`:`2011/04/23 09:47:13`,`opeName`:`京東快遞`,`waybillCode`:`bc00000001`}],`messsage`:`成功`,`code`:100}}}";
第一種:是用匿名方法生成,按照Json的格式,從外到內,一步一步寫,非陣列用new{},陣列用new[]{},名字必須與json中名字一致
//使用匿名變數構造 { var JsonDataForVar = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(data, new { jingdong_ldop_receive_trace_get_responce = new { code = string.Empty, querytrace_result = new { data = new[] { new { opeTitle=string.Empty, opeRemark=string.Empty, opeTime=string.Empty, waybillCode=string.Empty, opeName=string.Empty } } } } }); foreach (var item in JsonDataForVar.jingdong_ldop_receive_trace_get_responce.querytrace_result.data) { var a = item.opeTitle; var b = item.opeRemark; var c = item.opeTime; var d = item.waybillCode; var f = item.opeName; } }
第二種:使用實體
//實體部分,建議從內到外寫實體,名字必須與json中名字一致【簡便方法,搜尋Json轉實體,將Json字串匯入,自動生成實體】
public class Item { public string opeTitle { get; set; } public string opeRemark { get; set; } public string opeTime{ get; set; } public string waybillCode { get; set; } public string opeName { get; set; } } public class JdResult { public string code { get; set; } public string msg { get; set; } public List<Item> data { get; set; } } public class JdResponce { public string code { get; set; } public JdResult querytrace_result { get; set; } } public class JdBody { public JdResponce jingdong_ldop_receive_trace_get_responce { get; set; } }
//方法
//使用實體構造 { var JsonDataForClass = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(data, new JdBody()); foreach (var item in JsonDataForClass.jingdong_ldop_receive_trace_get_responce.querytrace_result.data) { var a = item.opeTitle; var b = item.opeRemark; var c = item.opeTime; var d = item.waybillCode; var f = item.opeName; } }