.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;
                }
            }
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值