介绍
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 GuidID { get ; set ;}
[DataMember(Order = 1 )]
public string Name { get ; set ;}
[DataMember(Order = 2 )]
public int Age { get ; set ;}
[DataMember(Order = 3 )]
public DateTimeTime { get ; set ;}
}
}
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 GuidID { get ; set ;}
[DataMember(Order = 1 )]
public string Name { get ; set ;}
[DataMember(Order = 2 )]
public int Age { get ; set ;}
[DataMember(Order = 3 )]
public DateTimeTime { 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 GuidID { get ; set ;}
[XmlElement(Order = 1 )]
public string Name { get ; set ;}
[XmlElement(Order = 2 )]
public int Age { get ; set ;}
[XmlElement(Order = 3 )]
public DateTimeTime { get ; set ;}
}
}
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 GuidID { get ; set ;}
[XmlElement(Order = 1 )]
public string Name { get ; set ;}
[XmlElement(Order = 2 )]
public int Age { get ; set ;}
[XmlElement(Order = 3 )]
public DateTimeTime { 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 GuidID { get ; set ;}
public string Name { get ; set ;}
public int Age { get ; set ;}
public DateTimeTime { get ; set ;}
}
}
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 GuidID { get ; set ;}
public string Name { get ; set ;}
public int Age { get ; set ;}
public DateTimeTime { 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 GuidID { get ; set ;}
public string Name { get ; set ;}
public int Age { get ; set ;}
public DateTimeTime { get ; set ;}
}
}
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 GuidID { get ; set ;}
public string Name { get ; set ;}
public int Age { get ; set ;}
public DateTimeTime { get ; set ;}
}
}
DataContractJsonSerializerObject.cs
using
System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
namespace WCF.ServiceLib.Serialization
{
@H_502_994@/**/ /// <summary>
/// 用于演示JSON序列化的实体类
/// </summary>
// Namespace-数据契约的命名空间
[DataContract(Namespace = " http://webabcd.cnblogs.com/ " )]
public class DataContractJsonSerializerObject
{
// Name-数据成员的名称
// Order-数据成员的序列化和反序列化的顺序
[DataMember(Name = " UniqueID " ,Order = 0 )]
public GuidID { get ; set ;}
[DataMember(Order = 1 )]
public string Name { get ; set ;}
[DataMember(Order = 2 )]
public int Age { get ; set ;}
[DataMember(Order = 3 )]
public DateTimeTime { get ; set ;}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
namespace WCF.ServiceLib.Serialization
{
@H_502_994@/**/ /// <summary>
/// 用于演示JSON序列化的实体类
/// </summary>
// Namespace-数据契约的命名空间
[DataContract(Namespace = " http://webabcd.cnblogs.com/ " )]
public class DataContractJsonSerializerObject
{
// Name-数据成员的名称
// Order-数据成员的序列化和反序列化的顺序
[DataMember(Name = " UniqueID " ,Order = 0 )]
public GuidID { get ; set ;}
[DataMember(Order = 1 )]
public string Name { get ; set ;}
[DataMember(Order = 2 )]
public int Age { get ; set ;}
[DataMember(Order = 3 )]
public DateTimeTime { 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,EventArgse)
{
// 演示DataContractSerializer的序列化和反序列化
ShowDataContractSerializer();
// 演示XmlSerializer的序列化和反序列化
ShowXmlSerializer();
// 演示SoapFormatter的序列化和反序列化
ShowSoapFormatter();
// 演示BinaryFormatter的序列化和反序列化
ShowBinaryFormatter();
// 演示DataContractJsonSerializer的序列化和反序列化
ShowDataContractJsonSerializer();
}
/// <summary>
/// 演示DataContractSerializer的序列化和反序列化
/// </summary>
void ShowDataContractSerializer()
{
vardataContractSerializerObject = new API.DataContractSerializerObject {ID = Guid.NewGuid(),Name = " DataContractSerializer " ,Age = 28 ,Time = DateTime.Now} ;
varserializer = new System.Runtime.Serialization.DataContractSerializer( typeof (API.DataContractSerializerObject));
// 序列化
varms = new MemoryStream();
serializer.WriteObject(ms,dataContractSerializerObject);
ms.Position = 0 ;
varsr = new StreamReader(ms);
varstr = sr.ReadToEnd();
txtDataContractSerializer.Text = str;
// 反序列化
varbuffer = System.Text.Encoding.UTF8.GetBytes(str);
varms2 = new MemoryStream(buffer);
vardataContractSerializerObject2 = serializer.ReadObject(ms2) as API.DataContractSerializerObject;
lblDataContractSerializer.Text = dataContractSerializerObject2.Name;
}
/// <summary>
/// 演示XmlSerializer的序列化和反序列化
/// </summary>
void ShowXmlSerializer()
{
varxmlSerializerObject = new API.XmlSerializerObject {ID = Guid.NewGuid(),Name = " XmlSerializer " ,Time = DateTime.Now} ;
varserializer = new System.Xml.Serialization.XmlSerializer( typeof (API.XmlSerializerObject));
// 序列化
varms = new MemoryStream();
serializer.Serialize(ms,xmlSerializerObject);
ms.Position = 0 ;
varsr = new StreamReader(ms);
varstr = sr.ReadToEnd();
txtXmlSerializer.Text = str;
// 反序列化
varbuffer = System.Text.Encoding.UTF8.GetBytes(str);
varms2 = new MemoryStream(buffer);
varxmlSerializerObject2 = serializer.Deserialize(ms2) as API.XmlSerializerObject;
lblXmlSerializer.Text = xmlSerializerObject2.Name;
}
/// <summary>
/// 演示SoapFormatter的序列化和反序列化
/// </summary>
void ShowSoapFormatter()
{
varsoapFormatterOjbect = new API.SoapFormatterOjbect {ID = Guid.NewGuid(),Name = " ShowSoapFormatter " ,Time = DateTime.Now} ;
varformatter = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
// 序列化
varms = new MemoryStream();
formatter.Serialize(ms,soapFormatterOjbect);
ms.Position = 0 ;
varstr = System.Text.Encoding.UTF8.GetString(ms.GetBuffer());
txtSoapFormatter.Text = str;
// 反序列化
varbuffer = System.Text.Encoding.UTF8.GetBytes(str);
varms2 = new MemoryStream(buffer);
varsoapFormatterOjbect2 = formatter.Deserialize(ms2) as API.SoapFormatterOjbect;
lblSoapFormatter.Text = soapFormatterOjbect2.Name;
}
/// <summary>
/// 演示BinaryFormatter的序列化和反序列化
/// </summary>
void ShowBinaryFormatter()
{
varbinaryFormatterObject = new API.BinaryFormatterObject {ID = Guid.NewGuid(),Name = " BinaryFormatter " ,Time = DateTime.Now} ;
varformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
// 序列化
varms = new MemoryStream();
formatter.Serialize(ms,binaryFormatterObject);
ms.Position = 0 ;
varbuffer = ms.GetBuffer();
varstr = System.Text.Encoding.UTF8.GetString(buffer);
txtBinaryFormatter.Text = str;
// 反序列化
varms2 = new MemoryStream(buffer);
varbinaryFormatterObject2 = formatter.Deserialize(ms2) as API.BinaryFormatterObject;
lblBinaryFormatter.Text = binaryFormatterObject2.Name;
}
/// <summary>
/// 演示DataContractJsonSerializer的序列化和反序列化
/// </summary>
void ShowDataContractJsonSerializer()
{
vardataContractJsonSerializerObject = new API.DataContractJsonSerializerObject {ID = Guid.NewGuid(),Name = " DataContractJsonSerializer " ,Time = DateTime.Now} ;
varserializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer( typeof (API.DataContractJsonSerializerObject));
// 序列化
varms = new MemoryStream();
serializer.WriteObject(ms,dataContractJsonSerializerObject);
ms.Position = 0 ;
varsr = new StreamReader(ms);
varstr = sr.ReadToEnd();
txtDataContractJsonSerializer.Text = str;
// 反序列化
varbuffer = System.Text.Encoding.UTF8.GetBytes(str);
varms2 = new MemoryStream(buffer);
vardataContractJsonSerializerObject2 = serializer.ReadObject(ms2) as API.DataContractJsonSerializerObject;
lblDataContractJsonSerializer.Text = dataContractJsonSerializerObject2.Name;
}
}
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,EventArgse)
{
// 演示DataContractSerializer的序列化和反序列化
ShowDataContractSerializer();
// 演示XmlSerializer的序列化和反序列化
ShowXmlSerializer();
// 演示SoapFormatter的序列化和反序列化
ShowSoapFormatter();
// 演示BinaryFormatter的序列化和反序列化
ShowBinaryFormatter();
// 演示DataContractJsonSerializer的序列化和反序列化
ShowDataContractJsonSerializer();
}
/// <summary>
/// 演示DataContractSerializer的序列化和反序列化
/// </summary>
void ShowDataContractSerializer()
{
vardataContractSerializerObject = new API.DataContractSerializerObject {ID = Guid.NewGuid(),Name = " DataContractSerializer " ,Age = 28 ,Time = DateTime.Now} ;
varserializer = new System.Runtime.Serialization.DataContractSerializer( typeof (API.DataContractSerializerObject));
// 序列化
varms = new MemoryStream();
serializer.WriteObject(ms,dataContractSerializerObject);
ms.Position = 0 ;
varsr = new StreamReader(ms);
varstr = sr.ReadToEnd();
txtDataContractSerializer.Text = str;
// 反序列化
varbuffer = System.Text.Encoding.UTF8.GetBytes(str);
varms2 = new MemoryStream(buffer);
vardataContractSerializerObject2 = serializer.ReadObject(ms2) as API.DataContractSerializerObject;
lblDataContractSerializer.Text = dataContractSerializerObject2.Name;
}
/// <summary>
/// 演示XmlSerializer的序列化和反序列化
/// </summary>
void ShowXmlSerializer()
{
varxmlSerializerObject = new API.XmlSerializerObject {ID = Guid.NewGuid(),Name = " XmlSerializer " ,Time = DateTime.Now} ;
varserializer = new System.Xml.Serialization.XmlSerializer( typeof (API.XmlSerializerObject));
// 序列化
varms = new MemoryStream();
serializer.Serialize(ms,xmlSerializerObject);
ms.Position = 0 ;
varsr = new StreamReader(ms);
varstr = sr.ReadToEnd();
txtXmlSerializer.Text = str;
// 反序列化
varbuffer = System.Text.Encoding.UTF8.GetBytes(str);
varms2 = new MemoryStream(buffer);
varxmlSerializerObject2 = serializer.Deserialize(ms2) as API.XmlSerializerObject;
lblXmlSerializer.Text = xmlSerializerObject2.Name;
}
/// <summary>
/// 演示SoapFormatter的序列化和反序列化
/// </summary>
void ShowSoapFormatter()
{
varsoapFormatterOjbect = new API.SoapFormatterOjbect {ID = Guid.NewGuid(),Name = " ShowSoapFormatter " ,Time = DateTime.Now} ;
varformatter = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
// 序列化
varms = new MemoryStream();
formatter.Serialize(ms,soapFormatterOjbect);
ms.Position = 0 ;
varstr = System.Text.Encoding.UTF8.GetString(ms.GetBuffer());
txtSoapFormatter.Text = str;
// 反序列化
varbuffer = System.Text.Encoding.UTF8.GetBytes(str);
varms2 = new MemoryStream(buffer);
varsoapFormatterOjbect2 = formatter.Deserialize(ms2) as API.SoapFormatterOjbect;
lblSoapFormatter.Text = soapFormatterOjbect2.Name;
}
/// <summary>
/// 演示BinaryFormatter的序列化和反序列化
/// </summary>
void ShowBinaryFormatter()
{
varbinaryFormatterObject = new API.BinaryFormatterObject {ID = Guid.NewGuid(),Name = " BinaryFormatter " ,Time = DateTime.Now} ;
varformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
// 序列化
varms = new MemoryStream();
formatter.Serialize(ms,binaryFormatterObject);
ms.Position = 0 ;
varbuffer = ms.GetBuffer();
varstr = System.Text.Encoding.UTF8.GetString(buffer);
txtBinaryFormatter.Text = str;
// 反序列化
varms2 = new MemoryStream(buffer);
varbinaryFormatterObject2 = formatter.Deserialize(ms2) as API.BinaryFormatterObject;
lblBinaryFormatter.Text = binaryFormatterObject2.Name;
}
/// <summary>
/// 演示DataContractJsonSerializer的序列化和反序列化
/// </summary>
void ShowDataContractJsonSerializer()
{
vardataContractJsonSerializerObject = new API.DataContractJsonSerializerObject {ID = Guid.NewGuid(),Name = " DataContractJsonSerializer " ,Time = DateTime.Now} ;
varserializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer( typeof (API.DataContractJsonSerializerObject));
// 序列化
varms = new MemoryStream();
serializer.WriteObject(ms,dataContractJsonSerializerObject);
ms.Position = 0 ;
varsr = new StreamReader(ms);
varstr = sr.ReadToEnd();
txtDataContractJsonSerializer.Text = str;
// 反序列化
varbuffer = System.Text.Encoding.UTF8.GetBytes(str);
varms2 = new MemoryStream(buffer);
vardataContractJsonSerializerObject2 = serializer.ReadObject(ms2) as API.DataContractJsonSerializerObject;
lblDataContractJsonSerializer.Text = dataContractJsonSerializerObject2.Name;
}
}
运行结果:
DataContractSerializer
XmlSerializer
ShowSoapFormatter
BinaryFormatter
DataContractJsonSerializer