文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>.net中解析json 之 DataContractJsonSerializer类

.net中解析json 之 DataContractJsonSerializer类

时间:2010-10-19  来源:远-方

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

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

代码如下:

view plaincopy to clipboardprint?
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); 
            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中的属性和客户端传递过来的一致)

view plaincopy to clipboardprint?
[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;  
    }  

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

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

view plaincopy to clipboardprint?
//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 序列化

    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即客户端传递过来

view plaincopy to clipboardprint?
//获取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字符串
        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字符串

view plaincopy to clipboardprint?
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(); 
        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字符串:

 view plaincopy to clipboardprint?
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;  
              }  
          }  
      } 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xylinzai_xy/archive/2010/09/26/5907610.aspx

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载