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



在平常中,我们经常会用到将一个T类型的东西,序列化成Json然后返回绑定数据到页面这样一个过程。每次面试,大概都被问到怎么序列化的呀?回答总是底层封装好的,算啦,还是做个简单栗子玩玩儿吧,也好堵住面试官的嘴。



进行序列化和反序列化的时候,主要用到对象DataContractJsonSerializer,然后再配合MemoryStream,就ok啦。


不多说,先来一版简单的+泛型的栗子,之后,我们会逐步改进:



[csharp] view plain copy
  1. publicstaticclassJsonConvert
  2. {
  3. ///<summary>
  4. ///Convertstheobjtojson.
  5. ///</summary>
  6. ///<typeparamname="T"></typeparam>
  7. ///<paramname="t">Thet.</param>
  8. ///<returns>System.String.</returns>
  9. ///<remarks>Editor:v-liuhchCreateTime:2015/6/2121:40:55</remarks>
  10. stringConvertObjToJson<T>(Tt)
  11. {
  12. DataContractJsonSerializerser=newDataContractJsonSerializer(t.GetType());
  13. try
  14. using(MemoryStreamms=newMemoryStream())
  15. ser.WriteObject(ms,t);
  16. stringstrjson=Encoding.UTF8.GetString(ms.ToArray());
  17. returnstrjson;
  18. }
  19. catch(IOException)
  20. //自己处理异常吧
  21. returnnull;
  22. }
  23. ///Jsonsthedeserialize.
  24. ///<paramname="strjson">TheSTrjson.</param>
  25. ///<returns>``0.</returns>
  26. ///<remarks>Editor:v-liuhchCreateTime:2015/6/2121:46:37</remarks>
  27. staticTJsonDeserialize<T>(stringstrjson)
  28. whereT:class//约束T为class,也可以放宽类型,这里只是个例子,写着玩儿的,欧巴们,此处可改
  29. newDataContractJsonSerializer(typeof(T));
  30. newMemoryStream(Encoding.UTF8.GetBytes(strjson)))
  31. Tobj=ser.Readobject(ms)asT;
  32. returnobj;
  33. catch(IOExceptione)
  34. }



然后我们写个类测试下:


copy
    //[Serializable]
  1. classStudent
  2. stringStudentId{get;set;}
  3. stringName{set;}
  4. intage{stringAddress{ }


测试代码



copy
    protectedvoidPage_Load(objectsender,EventArgse)
  1. Studentstudent=newStudent()
  2. StudentId="110",
  3. Name="水田如雅",
  4. age=20,
  5. Address="北京朝阳区"
  6. };
  7. #region序列化测试
  8. stringstrStudentJson=JsonConvert.ConvertObjToJson<Student>(student);
  9. Response.Write(strStudentJson);
  10. #endregion
  11. #region反序列化测试
  12. //{"Address":"北京朝阳区","Name":"水田如雅","StudentId":"110","age":20}
  13. stringstrjson="{\"Address\":\"北京朝阳区\",\"Name\":\"水田如雅\",\"StudentId\":\"110\",\"age\":20}";
  14. StudentnewStudent=JsonConvert.JsonDeserialize<Student>(strjson);
  15. Response.Write(@"<br/><br/>"+newStudent.Address+"<br/>"+newStudent.Name+"<br/>"+newStudent.StudentId+"<br/>"+newStudent.age.ToString());
  16. #endregion
  17. }


围观下结果:



不知亲你又没有注意到,以前我们可以序列化的对象都是要打上[Serializable]这一特性的,但是在student类上我却注掉了它,why? 自己写一个运行下看看会发生啥吧,原因也不解释,请参考百度大学。微懒的童鞋可以坐等楼主心情好了更新blog!另外,本例中只是对简单类型进行了序列化,复杂情况未进行考虑,楼主会看心情再更blog的。see u~



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


补上答案:

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


在平常中,我们经常会用到将一个T类型的东西,序列化成Json然后返回绑定数据到页面这样一个过程。每次面试,大概都被问到怎么序列化的呀?回答总是底层封装好的,算啦,还是做个简单栗子玩玩儿吧,也好堵住面试官的嘴。



进行序列化和反序列化的时候,主要用到对象DataContractJsonSerializer,然后再配合MemoryStream,就ok啦。


不多说,先来一版简单的+泛型的栗子,之后,我们会逐步改进:



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

相关文章

AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...