.net中解析json 之 DataContractJsonSerializer類

來源:互聯網
上載者:User

json 是輕量級的文本傳輸格式,一般用於前台和背景資料交換

DataContractJsonSerializer是fm3.5中專門對json序列化和還原序列化的類,以下是DataContractJsonSerializer的簡單應用

 

假設用戶端有個json對象,通過ajax傳到後台,後台解析

 

代碼如下:

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

toJSONString函數正常運行得引用json.js

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

 

後台代碼:

建立測試類別 testobj (testobj中的屬性和用戶端傳遞過來的一致)

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

建立序列化和還原序列化方法

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

 

調用:

還原序列化json(解析)註:people即用戶端傳遞過來

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

 

序列化成json字串

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

 

前台擷取後台返回的json字串:

  function updatePage() {<br /> if (request.readyState == 4) {<br /> if (request.status == 200) {<br /> var response = request.responseText;<br /> //轉化成對象<br /> //方法1<br /> response = response.parseJSON();<br /> //方法2<br /> // response = eval("(" + response + ")");<br /> //對象訪問方式<br /> document.getElementById("d1").innerHTML = response[1].Sex;<br /> //直接輸出<br /> // document.getElementById("d1").innerHTML = response;<br /> }<br /> }<br /> }<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.