zoukankan      html  css  js  c++  java
  • .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现

    由于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.csdn.net/net_lover";
    22.     MemoryStream ms2 = new MemoryStream();
    23.     ds.WriteObject(ms2, mxh2);
    24.     JSONString = Encoding.UTF8.GetString(ms2.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)进行序列化。若要使其类型可序列化,类型作者必须为其类型定义数据协定。

  • 相关阅读:
    C# 不用添加WebService引用,调用WebService方法
    贪心 & 动态规划
    trie树 讲解 (转载)
    poj 2151 Check the difficulty of problems (检查问题的难度)
    poj 2513 Colored Sticks 彩色棒
    poj1442 Black Box 栈和优先队列
    啦啦啦
    poj 1265 Area(pick定理)
    poj 2418 Hardwood Species (trie树)
    poj 1836 Alignment 排队
  • 原文地址:https://www.cnblogs.com/feb9903/p/3514862.html
Copyright © 2011-2022 走看看