zoukankan      html  css  js  c++  java
  • 化零为整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  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

    作者:Angelo Lee
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    pandas基础操作(一)
    将字符串中的字符映射不同的值,并保存txt文本
    and、or、not、in、not in 中的or
    pandas读写数据库
    SQL语句被锁,运行超时
    在一张表里添加另外一张表里的一列数据
    Linux服务进程管理
    Ubuntu软件更新更换源
    SpringBoot1-1
    Linux 基本使用2
  • 原文地址:https://www.cnblogs.com/yefengmeander/p/2887777.html
Copyright © 2011-2022 走看看