.net中解析json 之 DataContractJsonSerializer类

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

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

 

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

 

代码如下:

var people = [{ "UserName": "t1", "PassWord": "111111", "Sex": "男" },{ "UserName": "t2", "PassWord": "222222", "Sex": "女" }];  
var url = "Default.aspx?people=" + escape(people.toJSONString());  
request.open("POST", url, true);  
request.onreadystatechange = updatePage;  
request.send(null);  


 

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

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

 

后台代码:

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

 

[DataContract]//序列化   
public class TestObj  
{  
    [DataMember]  
    public string UserName { get; set; }  
     [DataMember]  
    public string PassWord { get; set; }  
     [DataMember]  
    public string Sex { get; set; }  
  
  
public TestObj(string u,string p,string s)  
    {  
        UserName = u;  
        PassWord = p;  
        Sex = s;  
    }  
}  


 

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

//json 序列化   
  
    public static string ToJsJson(object item)  
    {  
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());  
        using(MemoryStream ms=new MemoryStream())  
        {  
            serializer.WriteObject(ms, item);  
            StringBuilder sb = new StringBuilder();  
            sb.Append(Encoding.UTF8.GetString(ms.ToArray()));  
            return sb.ToString();  
        }  
    }  
  
    //反序列化   
  
    public static T FromJsonTo<T>(string jsonString)  
    {  
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));  
        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))  
        {  
            T jsonObject = (T)ser.ReadObject(ms);  
            return jsonObject;  
        }  
    }  


 

调用:

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

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


 

序列化成json字符串

List<TestObj> Users = new List<TestObj>();  
Users.Add(new TestObj("t1", "1", "男"));  
Users.Add(new TestObj("t2", "2", "女"));  
string json = Json.ToJsJson(Users);  
Response.Write(json);  
Response.End();  


 

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

function updatePage() {  
          if (request.readyState == 4) {  
              if (request.status == 200) {  
                  var response = request.responseText;  
                  //转化成对象   
                  //方法1   
                      response = response.parseJSON();  
                  //方法2   
                  // response = eval("(" + response + ")");   
                  //对象访问方式   
                  document.getElementById("d1").innerHTML = response[1].Sex;  
                  //直接输出   
                 // document.getElementById("d1").innerHTML = response;   
              }  
          }  
      }  


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值