q我吧

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

 

 
 
 

posted @ 2011-12-31 00:09  渲起浪花  阅读(1040)  评论(0编辑  收藏  举报