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 />