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

前端之家收集整理的这篇文章主要介绍了.Net——使用DataContractJsonSerializer进行序列化及反序列化基本操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。



@H_502_5@

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



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


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



@H_502_5@@H_502_5@

[csharp] view plain copy
  1. public@H_502_5@@H_502_5@static@H_502_5@@H_502_5@class@H_502_5@JsonConvert@H_502_5@@H_502_5@
  2. {@H_502_5@
  3. @H_404_72@///<summary>@H_502_5@@H_502_5@@H_502_5@
  4. ///Convertstheobjtojson.@H_502_5@@H_502_5@@H_502_5@
  5. ///</summary>@H_502_5@@H_502_5@@H_502_5@
  6. ///<typeparamname="T"></typeparam>@H_502_5@@H_502_5@@H_502_5@
  7. ///<paramname="t">Thet.</param>@H_502_5@@H_502_5@@H_502_5@
  8. ///<returns>System.String.</returns>@H_502_5@@H_502_5@@H_502_5@
  9. ///<remarks>Editor:v-liuhchCreateTime:2015/6/2121:40:55</remarks>@H_502_5@@H_502_5@@H_502_5@
  10. string@H_502_5@ConvertObjToJson<T>(Tt)@H_502_5@@H_502_5@
  11. {@H_502_5@
  12. DataContractJsonSerializerser=new@H_502_5@DataContractJsonSerializer(t.GetType());@H_502_5@@H_502_5@
  13. @H_502_5@
  14. try@H_502_5@@H_502_5@@H_502_5@
  15. using@H_502_5@(MemoryStreamms=@H_502_5@new@H_502_5@MemoryStream())@H_502_5@@H_502_5@
  16. ser.WriteObject(ms,t);@H_502_5@
  17. string@H_502_5@strJson=Encoding.UTF8.GetString(ms.ToArray());@H_502_5@@H_502_5@
  18. return@H_502_5@strJson;@H_502_5@@H_502_5@
  19. }@H_502_5@
  20. @H_502_5@
  21. catch@H_502_5@(IOException)@H_502_5@@H_502_5@
  22. //自己处理异常吧@H_502_5@@H_502_5@@H_502_5@
  23. return@H_502_5@@H_502_5@null@H_502_5@;@H_502_5@@H_502_5@
  24. }@H_502_5@
  25. ///Jsonsthedeserialize.@H_502_5@@H_502_5@@H_502_5@
  26. ///<paramname="strJson">TheSTRjson.</param>@H_502_5@@H_502_5@@H_502_5@
  27. ///<returns>``0.</returns>@H_502_5@@H_502_5@@H_502_5@
  28. ///<remarks>Editor:v-liuhchCreateTime:2015/6/2121:46:37</remarks>@H_502_5@@H_502_5@@H_502_5@
  29. static@H_502_5@TJsonDeserialize<T>(@H_502_5@string@H_502_5@strJson)@H_502_5@@H_502_5@
  30. whereT:class@H_502_5@@H_502_5@//约束T为class,也可以放宽类型,这里只是个例子,写着玩儿的,欧巴们,此处可改@H_502_5@@H_502_5@@H_502_5@
  31. new@H_502_5@DataContractJsonSerializer(@H_502_5@typeof@H_502_5@(T));@H_502_5@@H_502_5@
  32. new@H_502_5@MemoryStream(Encoding.UTF8.GetBytes(strJson)))@H_502_5@@H_502_5@
  33. Tobj=ser.ReadObject(ms)as@H_502_5@T;@H_502_5@@H_502_5@
  34. return@H_502_5@obj;@H_502_5@@H_502_5@
  35. catch@H_502_5@(IOExceptione)@H_502_5@@H_502_5@
  36. }@H_502_5@


@H_502_5@


@H_502_5@

然后我们写个类测试下:@H_502_5@


@H_502_5@

copy@H_301_318@
    //[Serializable]@H_502_5@@H_502_5@@H_502_5@
  1. class@H_502_5@Student@H_502_5@@H_502_5@
  2. string@H_502_5@StudentId{@H_502_5@get@H_502_5@;@H_502_5@set@H_502_5@;}@H_502_5@@H_502_5@
  3. string@H_502_5@Name{@H_502_5@set@H_502_5@;}@H_502_5@@H_502_5@
  4. int@H_502_5@age{@H_502_5@string@H_502_5@Address{@H_502_5@ }@H_502_5@


@H_502_5@

测试代码:@H_502_5@


@H_502_5@


@H_502_5@

@H_502_5@

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


@H_502_5@

围观下结果:@H_502_5@


@H_502_5@


@H_502_5@

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



@H_502_5@

----------------------------------------------------------第二天--------------------------------------------@H_502_5@


@H_502_5@

补上答案:@H_502_5@

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


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



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


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



@H_502_5@@H_502_5@

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

猜你在找的Json相关文章