程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WCF示例(9) - 序列化

WCF示例(9) - 序列化

編輯:關於.NET

介紹

WCF(Windows Communication Foundation) - 序列化:本文分別以DataContractSerializer, XmlSerializer, DataContractJsonSerializer, SoapFormatter, BinaryFormatter為例。

示例

1、服務

DataContractSerializerObject.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
  
using System.Runtime.Serialization;
  
namespace WCF.ServiceLib.Serialization
{
  /**//// <summary>
  /// 用於演示DataContract序列化的實體類
  /// </summary>
  // Namespace - 數據契約的命名空間
  [DataContract(Namespace = "http://webabcd.cnblogs.com/")]
  public class DataContractSerializerObject
  {
    // Name - 數據成員的名稱
    // Order - 數據成員的序列化和反序列化的順序
    [DataMember(Name = "UniqueID", Order = 0)]
    public Guid ID { get; set; }
  
    [DataMember(Order = 1)]
    public string Name { get; set; }
  
    [DataMember(Order = 2)]
    public int Age { get; set; }
  
    [DataMember(Order = 3)]
    public DateTime Time { get; set; }
  }
}

XmlSerializerObject.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
  
using System.Runtime.Serialization;
using System.Xml.Serialization;
  
namespace WCF.ServiceLib.Serialization
{
  /**//// <summary>
  /// 用於演示XML序列化的實體類
  /// </summary>
  // Namespace - XML 根元素的命名空間
  [XmlRoot(Namespace = "http://webabcd.cnblogs.com/")]
  public class XmlSerializerObject
  {
    // ElementName - 生成的 XML 元素的名稱
    // Order - 序列化和反序列化的順序
    [XmlElement(ElementName = "UniqueID", Order = 0)]
    public Guid ID { get; set; }
  
    [XmlElement(Order = 1)]
    public string Name { get; set; }
  
    [XmlElement(Order = 2)]
    public int Age { get; set; }
  
    [XmlElement(Order = 3)]
    public DateTime Time { get; set; }
  }
}

SoapFormatterObject.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
  
using System.Runtime.Serialization;
using System.Xml.Serialization;
  
namespace WCF.ServiceLib.Serialization
{
  /**//// <summary>
  /// 用於演示Soap序列化的實體類
  /// </summary>
  [Serializable]
  public class SoapFormatterOjbect
  {
    public Guid ID { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public DateTime Time { get; set; }
  }
}

BinaryFormatterObject.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
  
using System.Runtime.Serialization;
using System.Xml.Serialization;
  
namespace WCF.ServiceLib.Serialization
{
  /**//// <summary>
  /// 用於演示Binary序列化的實體類
  /// </summary>
  [Serializable]
  public class BinaryFormatterObject
  {
    public Guid ID { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public DateTime Time { get; set; }
  }
}

DataContractJsonSerializerObject.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
  
using System.Runtime.Serialization;
  
namespace WCF.ServiceLib.Serialization
{
  /**//// <summary>
  /// 用於演示JSON序列化的實體類
  /// </summary>
  // Namespace - 數據契約的命名空間
  [DataContract(Namespace = "http://webabcd.cnblogs.com/")]
  public class DataContractJsonSerializerObject
  {
    // Name - 數據成員的名稱
    // Order - 數據成員的序列化和反序列化的順序
    [DataMember(Name = "UniqueID", Order = 0)]
    public Guid ID { get; set; }
  
    [DataMember(Order = 1)]
    public string Name { get; set; }
  
    [DataMember(Order = 2)]
    public int Age { get; set; }
  
    [DataMember(Order = 3)]
    public DateTime Time { get; set; }
  }
}

2、演示

Sample.aspx.cs

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
  
using System.IO;
  
using API = WCF.ServiceLib.Serialization;
  
public partial class Serialization_Sample : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    // 演示DataContractSerializer的序列化和反序列化
    ShowDataContractSerializer();
  
    // 演示XmlSerializer的序列化和反序列化
    ShowXmlSerializer();
  
    // 演示SoapFormatter的序列化和反序列化
    ShowSoapFormatter();
  
    // 演示BinaryFormatter的序列化和反序列化
    ShowBinaryFormatter();
  
    // 演示DataContractJsonSerializer的序列化和反序列化
    ShowDataContractJsonSerializer();
  }
  
  /**//// <summary>
  /// 演示DataContractSerializer的序列化和反序列化
  /// </summary>
  void ShowDataContractSerializer()
  {
    var dataContractSerializerObject = new API.DataContractSerializerObject { ID = Guid.NewGuid(), Name = "DataContractSerializer", Age = 28, Time = DateTime.Now };
  
    var serializer = new System.Runtime.Serialization.DataContractSerializer(typeof(API.DataContractSerializerObject));
  
    // 序列化
    var ms = new MemoryStream();
  
    serializer.WriteObject(ms, dataContractSerializerObject);
  
    ms.Position = 0;
    var sr = new StreamReader(ms);
    var str = sr.ReadToEnd();
    txtDataContractSerializer.Text = str;
  
    // 反序列化
    var buffer = System.Text.Encoding.UTF8.GetBytes(str);
    var ms2 = new MemoryStream(buffer);
    var dataContractSerializerObject2 = serializer.ReadObject(ms2) as API.DataContractSerializerObject;
    lblDataContractSerializer.Text = dataContractSerializerObject2.Name;
  }
  
  /**//// <summary>
  /// 演示XmlSerializer的序列化和反序列化
  /// </summary>
  void ShowXmlSerializer()
  {
    var xmlSerializerObject = new API.XmlSerializerObject { ID = Guid.NewGuid(), Name = "XmlSerializer", Age = 28, Time = DateTime.Now };
  
    var serializer = new System.Xml.Serialization.XmlSerializer(typeof(API.XmlSerializerObject));
  
    // 序列化
    var ms = new MemoryStream();
  
    serializer.Serialize(ms, xmlSerializerObject);
  
    ms.Position = 0;
    var sr = new StreamReader(ms);
    var str = sr.ReadToEnd();
    txtXmlSerializer.Text = str;
  
    // 反序列化
    var buffer = System.Text.Encoding.UTF8.GetBytes(str);
    var ms2 = new MemoryStream(buffer);
    var xmlSerializerObject2 = serializer.Deserialize(ms2) as API.XmlSerializerObject;
    lblXmlSerializer.Text = xmlSerializerObject2.Name;
  }
  
  /**//// <summary>
  /// 演示SoapFormatter的序列化和反序列化
  /// </summary>
  void ShowSoapFormatter()
  {
    var soapFormatterOjbect = new API.SoapFormatterOjbect { ID = Guid.NewGuid(), Name = "ShowSoapFormatter", Age = 28, Time = DateTime.Now };
  
    var formatter = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
  
    // 序列化
    var ms = new MemoryStream();
  
    formatter.Serialize(ms, soapFormatterOjbect);
  
    ms.Position = 0;
    var str = System.Text.Encoding.UTF8.GetString(ms.GetBuffer());
    txtSoapFormatter.Text = str;
  
    // 反序列化
    var buffer = System.Text.Encoding.UTF8.GetBytes(str);
    var ms2 = new MemoryStream(buffer);
    var soapFormatterOjbect2 = formatter.Deserialize(ms2) as API.SoapFormatterOjbect;
    lblSoapFormatter.Text = soapFormatterOjbect2.Name;
  }
  
  /**//// <summary>
  /// 演示BinaryFormatter的序列化和反序列化
  /// </summary>
  void ShowBinaryFormatter()
  {
    var binaryFormatterObject = new API.BinaryFormatterObject { ID = Guid.NewGuid(), Name = "BinaryFormatter", Age = 28, Time = DateTime.Now };
  
    var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
  
    // 序列化
    var ms = new MemoryStream();
  
    formatter.Serialize(ms, binaryFormatterObject);
  
    ms.Position = 0;
    var buffer = ms.GetBuffer();
    var str = System.Text.Encoding.UTF8.GetString(buffer);
    txtBinaryFormatter.Text = str;
  
    // 反序列化
    var ms2 = new MemoryStream(buffer);
    var binaryFormatterObject2 = formatter.Deserialize(ms2) as API.BinaryFormatterObject;
    lblBinaryFormatter.Text = binaryFormatterObject2.Name;
  }
  
  /**//// <summary>
  /// 演示DataContractJsonSerializer的序列化和反序列化
  /// </summary>
  void ShowDataContractJsonSerializer()
  {
    var dataContractJsonSerializerObject = new API.DataContractJsonSerializerObject { ID = Guid.NewGuid(), Name = "DataContractJsonSerializer", Age = 28, Time = DateTime.Now };
  
    var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(API.DataContractJsonSerializerObject));
  
    // 序列化
    var ms = new MemoryStream();
  
    serializer.WriteObject(ms, dataContractJsonSerializerObject);
  
    ms.Position = 0;
    var sr = new StreamReader(ms);
    var str = sr.ReadToEnd();
    txtDataContractJsonSerializer.Text = str;
  
    // 反序列化
    var buffer = System.Text.Encoding.UTF8.GetBytes(str);
    var ms2 = new MemoryStream(buffer);
    var dataContractJsonSerializerObject2 = serializer.ReadObject(ms2) as API.DataContractJsonSerializerObject;
    lblDataContractJsonSerializer.Text = dataContractJsonSerializerObject2.Name;
  }
}

運行結果:

DataContractSerializer

<DataContractSerializerObject xmlns="http://webabcd.cnblogs.com/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><UniqueID>86148742-ef08-4d78-acab-ce393ea8b885</UniqueID><Name>DataContractSerializer</Name><Age>28</Age><Time>2008-04-24T09:06:23.875+08:00</Time></DataContractSerializerObject>

XmlSerializer

<?xml version="1.0"?>
<XmlSerializerObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://webabcd.cnblogs.com/">
<UniqueID>15efa47f-9532-4e91-8c00-3097ea976106</UniqueID>
<Name>XmlSerializer</Name>
<Age>28</Age>
<Time>2008-04-24T09:06:24.109375+08:00</Time>
</XmlSerializerObject>

ShowSoapFormatter

<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<a1:SoapFormatterOjbect id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/WCF.ServiceLib.Serialization/WCF.ServiceLib%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">
<_x003C_ID_x003E_k__BackingField>
<_a>1444890659</_a>
<_b>-27168</_b>
<_c>20156</_c>
<_d>131</_d>
<_e>247</_e>
<_f>146</_f>
<_g>29</_g>
<_h>18</_h>
<_i>59</_i>
<_j>58</_j>
<_k>189</_k>
</_x003C_ID_x003E_k__BackingField>
<_x003C_Name_x003E_k__BackingField id="ref-3">ShowSoapFormatter</_x003C_Name_x003E_k__BackingField>
<_x003C_Age_x003E_k__BackingField>28</_x003C_Age_x003E_k__BackingField>
<_x003C_Time_x003E_k__BackingField>2008-04-24T09:06:24.5000000+08:00</_x003C_Time_x003E_k__BackingField>
</a1:SoapFormatterOjbect>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

BinaryFormatter

????EWCF.ServiceLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null2WCF.ServiceLib.Serialization.BinaryFormatterObject<ID>k__BackingField<Name>k__BackingField<Age>k__BackingField<Time>k__BackingFieldSystem.Guid
????System.Guid_a_b_c_d_e_f_g_h_i_j_k??y?u??I????]F?BinaryFormatter?U?t?

DataContractJsonSerializer

{"UniqueID":"f4173d7d-9555-4dcb-8db7-62b85315d3f1","Name":"DataContractJsonSerializer","Age":28,"Time":"/Date(1208999184531+0800)\/"}

OK

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved