C#解析json
前一段时间有个项目调用到外协单位的一个web服务,公布的方法和返回值都是json字符串,返回结果让我困拢了很久。
返回结果:{"dataList":"[{\"HH\":\"5001314065\",\"HM\":\"602斯群慧\",\"COUNT(*)\":\"1\"},{\"HH\":\"5001301296\",\"HM\":\"宁波广厦物业管理有限公司\",\"COUNT(*)\":\"1\"}]","message":"获取数据成功!","data":"1","success":"1"}
没仔细看,就一把拿过来反序列化,
反序列化方法如下:
View Code
View Code
1 private T Deserialize<T>(string sJson) where T : class
2 {
3 DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T));
4 MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(sJson));
5 T obj = (T)ds.ReadObject(ms);
6
7 ms.Close();
8 return obj;
9 }
1 private T Deserialize<T>(string sJson) where T : class
2 {
3 DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T));
4 MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(sJson));
5 T obj = (T)ds.ReadObject(ms);
6
7 ms.Close();
8 return obj;
9 }
在反序列化的过程中一直报异常,经过检查发现是json字符串在包含了COUNT(*)这样的特殊字符,在反序列化的过程中找不到属性,后来沟通把COUNT(*),改成SUMTIME就可以正常解析了,
这里先说一下我的做法:声明一个类StopTimeResult 包含四个属性与json字符串中对应,然后再声明一个类StopTime包含三个属性,与嵌套的json字符串对应,氢目标json字符串反序列化成StopTimeResult 实例,然后取StopTimeResult中的dataList属性,反序列化成List<StopTime>
如下所示:
View Code
1 [DataContract]
2 public class StopTime
3 {
4 [DataMember]
5 public string HH { get; set; }
6 [DataMember]
7 public string HM { get; set; }
8 [DataMember]
9 public string SUM { get; set; }
10 }
2 public class StopTime
3 {
4 [DataMember]
5 public string HH { get; set; }
6 [DataMember]
7 public string HM { get; set; }
8 [DataMember]
9 public string SUM { get; set; }
10 }
View Code
1 [DataContract]
2 public class StopTimeResult
3 {
4 [DataMember]
5 public string dataList { get; set; }
6 [DataMember]
7 public string message { get; set; }
8 [DataMember]
9 public string success { get; set; }
10 [DataMember]
11 public string data { get; set; }
12 }
View Code
1 StopTimeResult str = new OMSHelper().Deserialize<StopTimeResult>(result);
2 List<StopTime> stopTimeList = new OMSHelper().Deserialize<List<StopTime>>(str.dataList);
2 public class StopTimeResult
3 {
4 [DataMember]
5 public string dataList { get; set; }
6 [DataMember]
7 public string message { get; set; }
8 [DataMember]
9 public string success { get; set; }
10 [DataMember]
11 public string data { get; set; }
12 }
View Code
1 StopTimeResult str = new OMSHelper().Deserialize<StopTimeResult>(result);
2 List<StopTime> stopTimeList = new OMSHelper().Deserialize<List<StopTime>>(str.dataList);
作者:逐帆
出处:http://www.cnblogs.com/langhua/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。