`
61party
  • 浏览: 1052965 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

.NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现

阅读更多

由于JSON对象在数据交换中越来越流行,.NET Framewok 3.5也提供了JSON对象序列化和反序列化的类,这就是System.Runtime.Serialization.Json 命名空间下的 DataContractJsonSerializer 类。利用这个类,可以实现JSON对象的序列化和反序列化。下面就是一个简单的例子:

  1. <%@PageLanguage="C#"AutoEventWireup="true"%>
  2. <%@ImportNamespace="System.IO"%>
  3. <%@ImportNamespace="System.Runtime.Serialization"%>
  4. <%@ImportNamespace="System.Runtime.Serialization.Json"%>
  5. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  6. <scriptrunat="server">
  7. protectedvoidButton1_Click(objectsender,EventArgse)
  8. {
  9. //反序列化成对象
  10. StringJSONString="{\"Name\":\"孟宪会\",\"Url\":\"http://dotnet.aspx.cc/\"}";
  11. DataContractJsonSerializerds=newDataContractJsonSerializer(typeof(MengxianHui));
  12. MemoryStreamms=newMemoryStream(Encoding.Unicode.GetBytes(JSONString));//这里不能使用GB2312编码的
  13. MengxianHuimxh=(MengxianHui)ds.ReadObject(ms);
  14. ms.Close();
  15. Response.Write("<li>"+mxh.Name+""+mxh.Url);
  16. //对象的序列化
  17. MengxianHuimxh2=newMengxianHui();
  18. mxh2.Name="孟子E章";
  19. mxh2.Url="http://blog.csdn.net/net_lover";
  20. MemoryStreamms2=newMemoryStream();
  21. ds.WriteObject(ms2,mxh2);
  22. JSONString = Encoding.UTF8.GetString(ms2.ToArray());
  23. Response.Write("<li>"+JSONString);
  24. ms2.Close();
  25. }
  26. ///<summary>
  27. ///类对象需要标记为DataContractAttribute
  28. ///</summary>
  29. [DataContractAttribute]
  30. classMengxianHui
  31. {
  32. //成员需要标记为DataMember
  33. [DataMember]
  34. publicstringName{set;get;}
  35. [DataMember]
  36. publicstringUrl{set;get;}
  37. }
  38. </script>
  39. <htmlxmlns="http://www.w3.org/1999/xhtml">
  40. <headid="Head1"runat="server">
  41. <title>孟子E章JSON测试例子</title>
  42. </head>
  43. <body>
  44. <formid="form1"runat="server">
  45. <asp:ButtonID="Button1"runat="server"OnClick="Button1_Click"Text="Button"/>
  46. </form>
  47. </body>
  48. </html>


在进行代码测试时,注意添加引用System.Runtime.SerializationSystem.Runtime.Serialization.Json。
“数据协定”是在服务与客户端之间达成的正式协议,用于以抽象方式描述要交换的数据。 也就是说,为了进行通信,客户端和服务不必共享相同的类型,而只需共享相同的数据协定。 数据协定为每个参数或返回类型精确定义为进行交换而序列化(转换为 XML)哪些数据。所有 .NET Framework 基元类型(如整型和字符串型)以及某些被视为基元的类型(如 DateTime 和 XmlElement)无需做其他任何准备工作就可序列化并被视为拥有默认数据协定。 许多 .NET Framework 类型也具有现有数据协定。 必须为所创建的新复杂类型定义数据协定以便可以进行序列化。 正常情况下可通过将 DataContractAttribute 属性应用到该类型来完成该任务。 可以将此属性应用到类、结构和枚举。 然后必须将 DataMemberAttribute 属性应用到数据协定类型的每个成员,以指示这些成员为数据成员,即应进行序列化。
DataMemberAttribute 类:当应用于类型的成员时,指定该成员是数据协定的一部分并可由 DataContractSerializer 进行序列化。
DataContractAttribute 类:指定该类型要定义或实现一个数据协定,并可由序列化程序(如 DataContractSerializer)进行序列化。若要使其类型可序列化,类型作者必须为其类型定义数据协定。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics