C# Json反序列化

劉Te發表於2018-04-24

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;
                }
            }

 

相關文章