在接口开发的过程中经常通过接口获取数据返回是json格式字符串。
但是返回的字符串可能比较复杂,可能不止一种类型的数据。
例如:
{ "resultCode": "0", "resultMsg": "查询成功!", "resultData": { "classinfo": [ { "classNo": "101", "className": "小A" }, { "classNo": "101", "className": "小B" }, ], "otherinfo": [ { "otherNo": "1111", "otherType": "A" }, { "otherNo": "222", "otherType": "b", } ] } }
如何解析呢剔除其他信息只获取具体数据呢?
ps:使用JavaScriptSerializer 或者 Json.Net 都可以
第一种方法我用的是JavaScriptSerializer 。
第二种方法用的是 Json.Net 但是需要在NuGET里面添加该服务(推荐)或者上网下载dll文件引入。
方法一: 直接按照 json的格式构建对象就可以直接解析了
这样所有的返回数据就变成一个对象。
JavaScriptSerializer jss = new JavaScriptSerializer(); result_Msg result = jss.Deserialize<result_Msg>(json);
1 2 if (result.resultData.classinfo!= null && result.resultData.classinfo.Count > 0) 3 { 4 List<classinfo> classinfos= result.resultData.classinfo; 5 }
1 [Serializable] 2 [DataContract] 3 public class result_Msg 4 { 5 /// <summary> 6 /// code 7 /// </summary> 8 [DataMember(IsRequired = false)] 9 public string resultCode { get; set; } 10 /// <summary> 11 /// msg 12 /// </summary> 13 [DataMember(IsRequired = false)] 14 public string resultMsg { get; set; } 15 /// <summary> 16 /// 数据集合 17 /// </summary> 18 [DataMember(IsRequired = false)] 19 public resultData resultData { get; set; } 20 }
1 [Serializable] 2 public class resultData 3 { 4 public List<classinfo> classinfo{ get; set; } 5 public List<otherinfo> otherinfo{ get; set; } 6 7 }
方法二 :先解析成字典,获取到数据以后再次转换成json然后解析,思路是这个思路,如果遇到其他更加复杂的json也可以 按照这个思路去解析
1 //第一次解析 2 Dictionary<string, object> dic = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(json); 3 //获取具体数据部分 4 object obj = dic["resultData"]; 5 //将数据部分再次转换为json字符串 6 string jsondata = Newtonsoft.Json.JsonConvert.SerializeObject(obj); 7 //获取数据中的 不同类型的数据 8 Dictionary<string, object> dicc = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(jsondata); 9 10 //chalssinfo 11 object objclass = dicc["classinfo"]; 12 string jsonclass = Newtonsoft.Json.JsonConvert.SerializeObject(objclass); 13 DataTable tclass = Newtonsoft.Json.JsonConvert.DeserializeObject<DataTable>(jsonclass); 14 //otherinfo 15 object objother = dicc["otherinfo"]; 16 string jsonother = Newtonsoft.Json.JsonConvert.SerializeObject(objother); 17 DataTable tother = Newtonsoft.Json.JsonConvert.DeserializeObject<DataTable>(jsonother); 18 19 20 // tclass 和 tother 里面分别存放 classinfo和otherinfo 然后可以操作datatale 或者转成list也行 21
如果还有其他的方法请告知 谢谢!!