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

介绍如何使用.NET Framework中的DataContractJsonSerializer类实现JSON对象的序列化和反序列化。通过示例代码展示了序列化过程,并解释了数据协定的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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

 



  1. <%@ Page Language="C#" AutoEventWireup="true" %>
  2. <%@ Import Namespace="System.IO" %>
  3. <%@ Import Namespace="System.Runtime.Serialization" %>
  4. <%@ Import Namespace="System.Runtime.Serialization.Json" %>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  6. <script runat="server">
  7.   
  8.   protected void Button1_Click(object sender, EventArgs e)
  9.   {
  10.     //反序列化成对象    
  11.     String JSONString = "{/"Name/":/"孟宪会/",/"Url/":/"http://dotnet.aspx.cc//"}";
  12.     DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(MengxianHui));
  13.     MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(JSONString)); //这里不能使用GB2312编码的
  14.     MengxianHui mxh = (MengxianHui)ds.ReadObject(ms);
  15.     ms.Close();
  16.     Response.Write("<li>" + mxh.Name + " " + mxh.Url);

  17.     
  18.     //对象的序列化
  19.     MengxianHui mxh2 = new MengxianHui();
  20.     mxh2.Name = "孟子E章";
  21.     mxh2.Url = "http://blog.youkuaiyun.com/net_lover";
  22.     MemoryStream ms2 = new MemoryStream();
  23.     ds.WriteObject(ms2, mxh2);
  24.     JSONString = Encoding.Unicode.GetString(ms.ToArray());
  25.     Response.Write("<li>" + JSONString);
  26.     ms2.Close();
  27.   }

  28.   /// <summary>
  29.   /// 类对象需要标记为DataContractAttribute
  30.   /// </summary>
  31.   [DataContractAttribute]
  32.   class MengxianHui
  33.   {
  34.     //成员需要标记为 DataMember
  35.     [DataMember]
  36.     public string Name { set; get; }
  37.     [DataMember]
  38.     public string Url { set; get; }
  39.   }

  40. </script>

  41. <html xmlns="http://www.w3.org/1999/xhtml">
  42. <head id="Head1" runat="server">
  43.   <title>孟子E章 JSON 测试例子</title>
  44. </head>
  45. <body>
  46.   <form id="form1" runat="server">
  47.   <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
  48.   </form>
  49. </body>
  50. </html>



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

Json.NET 描述: json。 网络是一个流行的高性能JSON为。NET框架 灵活的JSON序列化器对之间的转换。净对象JSON linq到JSON用于手动阅读写作JSON 高性能,速度比。净的内置JSON序列化器 写缩进,容易阅读JSON JSONXML之间进行转换 支持: .NET 2, .NET 3.5, .NET 4, .NET 4.5, Silverlight, Windows Phone and Windows 8 Store 版本: Json.NET has different libaries for the various .NET Framework versions. -Net45: .NET latest (4.5) -Net40: .NET 4.0 -Net35: .NET 3.5 -Net20: .NET 2.0 -WinRT: Windows 8 Store -Portable45: .NET 4.5, Windows Phone 8, Windows 8 Store -Portable40: .NET 4.0, Windows Phone 7, Windows 8 Store, Silverlight 4 Notes: Microsoft stopped support for the Compact Framework in Visual Studio 2010. For a Compact Framework 3.5 build download Json.NET 3.5. For a Silverlight 3.0 build download Json.NET 3.5. Microsoft Visual Studio 2010 重新生成解决方案的一些警告处理 警告 2 预定义类型“System.Action”是在全局别名的多个程序集中定义的;将使用“c:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework \v4.0\mscorlib.dll”中的定义 ClassLibrary1 警告 3 预定义类型“System.Action”是在全局别名的多个程序集中定义的;将使用“c:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework \v4.0\mscorlib.dll”中的定义 ClassLibrary1 警告 4 预定义类型“System.Action”是在全局别名的多个程序集中定义的;将使用“c:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework \v4.0\mscorlib.dll”中的定义 ClassLibrary1 警告 5 预定义类型“System.Action”是在全局别名的多个程序集中定义的;将使用“c:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework \v4.0\mscorlib.dll”中的定义 ClassLibrary1 警告 6 预定义类型“System.Func”是在全局别名的多个程序集中定义的;将使用“c:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework \v4.0\mscorlib.dll”中的定义 ClassLibrary1 警告 7 预定义类型“System.Func”是在全局别名的多个程序集中定义的;将使用“c:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework \v4.0\mscorlib.dll”中的定义 ClassLibrary1 警告 8 预定义类型“System.Func”是在全局别名的多个程序集中定义的;将使用“c:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework \v4.0\mscorlib.dll”中的定义 ClassLibrary1 警告 9 预定义类型“System.Func”是在全局别名的多个程序集中定义的;将使用“c:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework \v4.0\mscorlib.dll”中的定义 ClassLibrary1 警告 10 预定义类型“System.Func”是在全局别名的多个程序集中定义的;将使用“c:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework \v4.0\mscorlib.dll”中的定义 ClassLibrary1 问题原因:检查程序发现,由于项目中引用了Newtonsoft.Json.Net20,从而造成系统的类重名(项目FRAMEWORK的版本4.0)。 Newtonsoft.Json.Net 包括: .NET 2, .NET 3.5, .NET 4, .NET 4.5, Silverlight, Windows Phone and Windows 8 Store,所有dll文件源码,有需要的同学可以直接下载。 个人网站多多支持:www.mlyuansu.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值