日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.Net——使用DataContractJsonSerializer进行序列化及反序列化基本操作

發布時間:2023/12/31 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net——使用DataContractJsonSerializer进行序列化及反序列化基本操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


???

??????? 在平常中,我們經常會用到將一個T類型的東西,序列化成Json然后返回綁定數據到頁面這樣一個過程。每次面試,大概都被問到怎么序列化的呀?回答總是底層封裝好的,算啦,還是做個簡單栗子玩玩兒吧,也好堵住面試官的嘴。



??????? 進行序列化和反序列化的時候,主要用到對象DataContractJsonSerializer,然后再配合MemoryStream,就ok啦。


??????? 不多說,先來一版簡單的+泛型的栗子,之后,我們會逐步改進:



???????

public static class JsonConvert{/// <summary>/// Converts the obj to json./// </summary>/// <typeparam name="T"></typeparam>/// <param name="t">The t.</param>/// <returns>System.String.</returns>/// <remarks>Editor:v-liuhch CreateTime:2015/6/21 21:40:55</remarks>public static string ConvertObjToJson<T>(T t){DataContractJsonSerializer ser = new DataContractJsonSerializer(t.GetType());try { using (MemoryStream ms=new MemoryStream()){ser.WriteObject(ms,t);string strJson=Encoding.UTF8.GetString(ms.ToArray());return strJson;}}catch (IOException){//自己處理異常吧return null;}}/// <summary>/// Jsons the deserialize./// </summary>/// <typeparam name="T"></typeparam>/// <param name="strJson">The STR json.</param>/// <returns>``0.</returns>/// <remarks>Editor:v-liuhch CreateTime:2015/6/21 21:46:37</remarks>public static T JsonDeserialize<T>(string strJson)where T:class //約束T為class,也可以放寬類型,這里只是個例子,寫著玩兒的,歐巴們,此處可改{DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));try{using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson))){T obj = ser.ReadObject(ms) as T;return obj;}}catch (IOException e){//自己處理異常吧return null;}}}



???? 然后我們寫個類測試下:


????

//[Serializable]public class Student{public string StudentId { get; set; }public string Name { get; set; }public int age { get; set; }public string Address { get; set; }}


測試代碼:



?????

protected void Page_Load(object sender, EventArgs e){Student student = new Student(){StudentId = "110",Name = "水田如雅",age = 20,Address = "北京朝陽區"};#region 序列化測試string strStudentJson = JsonConvert.ConvertObjToJson<Student>(student);Response.Write(strStudentJson);#endregion#region 反序列化測試//{"Address":"北京朝陽區","Name":"水田如雅","StudentId":"110","age":20}string strJson = "{\"Address\":\"北京朝陽區\",\"Name\":\"水田如雅\",\"StudentId\":\"110\",\"age\":20}";Student newStudent = JsonConvert.JsonDeserialize<Student>(strJson);Response.Write(@"<br/><br/>" + newStudent.Address + "<br/>" + newStudent.Name + "<br/>" + newStudent.StudentId + "<br/>" + newStudent.age.ToString());#endregion}


圍觀下結果:



????? 不知親你又沒有注意到,以前我們可以序列化的對象都是要打上[Serializable]這一特性的,但是在student類上我卻注掉了它,why? 自己寫一個運行下看看會發生啥吧,原因也不解釋,請參考百度大學。微懶的童鞋可以坐等樓主心情好了更新blog!另外,本例中只是對簡單類型進行了序列化,復雜情況未進行考慮,樓主會看心情再更blog的。see u~



?----------------------------------------------------------第二天--------------------------------------------


補上答案:

https://msdn.microsoft.com/zh-cn/library/bb412179.aspx














總結

以上是生活随笔為你收集整理的.Net——使用DataContractJsonSerializer进行序列化及反序列化基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。