化零为整WCF(9) - 序列化(DataContractSerializer, XmlSerializer, DataContractJsonSerializer, SoapFormatter, BinaryFormatter)

介绍
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 ;}
}

}


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 ;}
}

}


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 ;}
}

}


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 ;}
}

}


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 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;
}

}



运行结果:


<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>


<?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>


<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>


???? 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__backingField System.Guid ???? System.Guid _a_b_c_d_e_f_g_h_i_j_k??y?u??I????]F?BinaryFormatter?U?t?


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


OK
[源码下载]

相关文章

AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...