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     }


 
在反序列化的过程中一直报异常,经过检查发现是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 {  getset; }
   6         [DataMember]
   7          public  string HM {  getset; }
   8         [DataMember]
   9          public  string SUM {  getset; }
  10     }
 

 

View Code
  1     [DataContract]
  2      public  class StopTimeResult
  3     {
  4         [DataMember]
  5          public  string dataList {  getset; }
  6         [DataMember]
  7          public  string message {  getset; }
  8         [DataMember]
  9          public  string success {  getset; }
10         [DataMember]
11          public  string data {  getset; }
12     }


View Code 

1                 StopTimeResult str =  new OMSHelper().Deserialize<StopTimeResult>(result);
2                 List<StopTime> stopTimeList =  new OMSHelper().Deserialize<List<StopTime>>(str.dataList);

 

 
 
 

你可能感兴趣的:(json)