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)进行序列化。若要使其类型可序列化,类型作者必须为其类型定义数据协定。

  • 相关阅读:
    python程序打包,来源于知乎(已验证)
    登录窗体界面设计
    窗体应用常见操作
    MDI窗体应用
    第四单元
    Test3_3——3_20
    TEST3_2
    ff文字省略号
    jQuery 浏览器高度宽度获取
    CSS 单行溢出文本显示省略号...的方法(兼容IE FF)(转)
  • 原文地址:https://www.cnblogs.com/feb9903/p/3514862.html
Copyright © 2011-2022 走看看