.net中解析json 之 DataContractJsonSerializer类

来源:互联网 发布:传送带设计软件 编辑:程序博客网 时间:2024/05/07 04:00

来自:http://blog.csdn.net/xylinzai_xy/article/details/5907610

json 是轻量级的文本传输格式,一般用于前台和后台的数据交换

DataContractJsonSerializer是fm3.5中专门对json序列化和反序列化的类,以下是DataContractJsonSerializer的简单应用

 

假设客户端有个json对象,通过ajax传到后台,后台解析

 

代码如下:

[c-sharp] view plaincopy
  1. var people = [{ "UserName""t1""PassWord""111111""Sex""男" },{ "UserName""t2""PassWord""222222""Sex""女" }];  
  2. var url = "Default.aspx?people=" + escape(people.toJSONString());  
  3. request.open("POST", url, true);  
  4. request.onreadystatechange = updatePage;  
  5. request.send(null);  

toJSONString函数正常运行得引用json.js

   <script src="json.js" type="text/javascript"></script>

 

后台代码:

新建测试类 testobj (testobj中的属性和客户端传递过来的一致)

[c-sharp] view plaincopy
  1. [DataContract]//序列化  
  2. public class TestObj  
  3. {  
  4.     [DataMember]  
  5.     public string UserName { getset; }  
  6.      [DataMember]  
  7.     public string PassWord { getset; }  
  8.      [DataMember]  
  9.     public string Sex { getset; }  
  10.   
  11.   
  12. public TestObj(string u,string p,string s)  
  13.     {  
  14.         UserName = u;  
  15.         PassWord = p;  
  16.         Sex = s;  
  17.     }  
  18. }  

新建序列化和反序列化方法

[c-sharp] view plaincopy
  1. //json 序列化  
  2.   
  3.     public static string ToJsJson(object item)  
  4.     {  
  5.         DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());  
  6.         using(MemoryStream ms=new MemoryStream())  
  7.         {  
  8.             serializer.WriteObject(ms, item);  
  9.             StringBuilder sb = new StringBuilder();  
  10.             sb.Append(Encoding.UTF8.GetString(ms.ToArray()));  
  11.             return sb.ToString();  
  12.         }  
  13.     }  
  14.   
  15.     //反序列化  
  16.   
  17.     public static T FromJsonTo<T>(string jsonString)  
  18.     {  
  19.         DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));  
  20.         using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))  
  21.         {  
  22.             T jsonObject = (T)ser.ReadObject(ms);  
  23.             return jsonObject;  
  24.         }  
  25.     }  

 

调用:

反序列化json(解析)注:people即客户端传递过来

[c-sharp] view plaincopy
  1. //获取json字符串  
  2.        string jsonStr = Request["people"];  
  3.        List<TestObj> obj = Json.FromJsonTo<List<TestObj>>(jsonStr);  
  4.        foreach (TestObj item in obj)  
  5.            {  
  6.         Response.Write(string.Format("UserName:{0},Password:{1},Sex:{2}/r/n", item.UserName, item.PassWord, item.Sex));  
  7.            }  
  8.        Response.End();  

 

序列化成json字符串

[c-sharp] view plaincopy
  1. List<TestObj> Users = new List<TestObj>();  
  2. Users.Add(new TestObj("t1""1""男"));  
  3. Users.Add(new TestObj("t2""2""女"));  
  4. string json = Json.ToJsJson(Users);  
  5. Response.Write(json);  
  6. Response.End();  

 

前台获取后台返回的json字符串:

 

[c-sharp] view plaincopy
  1. function updatePage() {  
  2.           if (request.readyState == 4) {  
  3.               if (request.status == 200) {  
  4.                   var response = request.responseText;  
  5.                   //转化成对象  
  6.                   //方法1  
  7.                       response = response.parseJSON();  
  8.                   //方法2  
  9.                   // response = eval("(" + response + ")");  
  10.                   //对象访问方式  
  11.                   document.getElementById("d1").innerHTML = response[1].Sex;  
  12.                   //直接输出  
  13.                  // document.getElementById("d1").innerHTML = response;  
  14.               }  
  15.           }  
  16.       }  



原创粉丝点击