介绍
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
XmlSerializer
ShowSoapFormatter
BinaryFormatter
DataContractJsonSerializer