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

[索引页]
[源码下载]


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


作者:webabcd


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

        [DataMember(Order 
= 1)]
        
public string Name getset; }

        [DataMember(Order 
= 2)]
        
public int Age getset; }

        [DataMember(Order 
= 3)]
        
public DateTime Time getset; }
    }

}


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

        [XmlElement(Order 
= 1)]
        
public string Name getset; }

        [XmlElement(Order 
= 2)]
        
public int Age getset; }

        [XmlElement(Order 
= 3)]
        
public DateTime Time getset; }
    }

}


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 getset; }
        
public string Name getset; }
        
public int Age getset; }
        
public DateTime Time getset; }
    }

}


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 getset; }
        
public string Name getset; }
        
public int Age getset; }
        
public DateTime Time getset; }
    }

}


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

        [DataMember(Order 
= 1)]
        
public string Name getset; }

        [DataMember(Order 
= 2)]
        
public int Age getset; }

        [DataMember(Order 
= 3)]
        
public DateTime Time getset; }
    }

}



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

 

OK
[源码下载]

posted @ 2008-04-24 09:13  webabcd  阅读(8525)  评论(12编辑  收藏  举报