成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WCF序列化各種方式詳解

開發 開發工具
WCF序列化其實可以分為兩種方式,一種為DataContractSerializer,而另一種則為NetDataContractSerializer。

WCF是一款由微軟公司開發的一款功能強大的工具,可以為開發人員輕松的創建一個安全性較高的解決方案。在這里我們就先為大家詳細介紹一下有關WCF序列化的相關概念,希望能給大家帶來一些幫助。

大家知道,WCF內置了兩種序列化方式,DataContractSerializer和NetDataContractSerializer。WCF序列化的基本概念Artech兄已經說得很清楚了,在此不再贅述,本文僅就此二者的區別作一番探討。

先來看看兩者的聲明:

  1. public sealed class DataContractSerializer : XmlObjectSerializer  
  2. {   
  3. public DataContractSerializer(Type type);   
  4. … public override object ReadObject(XmlReader reader);  
  5. public object ReadObject(Stream stream);   
  6. public void WriteObject(Stream stream, object graph);  
  7. public override void WriteObject(XmlWriter writer, object graph); …   
  8. }   
  9. public sealed class NetDataContractSerializer : 
    XmlObjectSerializer, IFormatter  
  10. {  
  11. public NetDataContractSerializer();   
  12. … public object Deserialize(Stream stream);   
  13. public void Serialize(Stream stream, object graph);  
  14. public override object ReadObject(XmlReader reader);  
  15. public object ReadObject(Stream stream);   
  16. public void WriteObject(Stream stream, object graph);  
  17. public override void WriteObject(XmlWriter writer, object graph);   
  18. …} 

其中兩者的ReadObject(Straem)、WriteObject(Stream, object)的實現繼承自基類XmlObjectSerializer,其他方法均為已覆寫或實現。 #t#

從兩個類型的聲明中可以看出NetDataContractSerializer實現了IFormatter接口,而DataContractSerializer沒有,因此只有NetDataContractSerializer能使用.NET基礎結構中的序列化,而DataContractSerializer則是專用于WCF的。

還有一個細節DataContractSerializer的Constructor有一個Type類型的參數,而NetDataContractSerializer沒有。這可蘊藏著深意啊,讀者接著看就明白了。

 

現在,再來看看此二者的最大關鍵區別吧!從一個WCF序列化示例開始吧:

  1. [DataContract]  
  2. public class Sub   
  3. {   
  4. // Fields [DataMember]   
  5. public int Id;   
  6. [DataMember]   
  7. public string Name;   
  8. // Methods   
  9. public Sub() {}   
  10. public Sub(int id, string name) {   
  11. this.Id = idthis.Name = name;   
  12. }} 

以上是一個再簡單不過的DataContract的,把他給序列化看看出來些啥。

 

先用DataContractSerializer序列化:

 

 

  1. Sub sub = new Sub(9, "nine");  
  2. DataContractSerializer dcs = new DataContractSerializer(typeof(Sub));  
  3. MemoryStream stream = new MemoryStream();  
  4. dcs.WriteObject(stream, sub);  
  5. byte[] buf = stream.ToArray();  
  6. string str = Encoding.UTF8.GetString(buf, 0, buf.Length); 

 

執行完以上代碼后,str的值為:

 

 

 

  1. < Sub xmlns="http://schemas.datacontract.org/2004/07/
    ServiceInterface"
     xmlns:i="http://www.w3.org/2001/
    XMLSchema-instance"
    >   
  2. < Id>10< /Id>   
  3. < Name>nine< /Name>   
  4. < /Sub> 

 

恩,此SOAP消息那是相當得正常。然后將同一個對象用NetDataContractSerializer序列化:

  1. NetDataContractSerializer ndcs = new NetDataContractSerializer();  
  2. MemoryStream nstream = new MemoryStream();  
  3. ndcs.WriteObject(nstream, sub);  
  4. byte[] nbuf = nstream.ToArray();  
  5. string nstr = Encoding.UTF8.GetString(nbuf, 0, nbuf.Length); 

 

觀察一下nstr的值:

  1. < Sub z:Id="1" z:Type="ServiceInterface.Sub" z:Assembly=
    "ServiceInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 
    xmlns="http://schemas.datacontract.org/2004/07/ServiceInterface" 
    xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">   
  2. < Id>10< /Id>   
  3. < Name z:Id="2">nine< /Name>   
  4. < /Sub> 

 

發現了嗎?撇開xml命名空間不說,Sub元素多了Type,Assembly和Id,Name屬性也多了個Id。信息完整多了~~,現在就可以解釋兩者Constructor的區別了,DataContractSerializer是按照SOA的datacontract協議(與SOAP基本一直)來序列化對象的,它并不包含平臺相關的信息,比如類型,程序集等。所以比如在創建序列化器時就提供將要序列化和反系列化的類型信息,DataContractSerializer無法工作。而NetDataContractSerializer則大大擴充了SOAP,為它添加了程序集、類型名等附加信息,這樣一來,序列化器可以完全由序列化的內容來準確推斷將要構造的對象,而不必依賴Constructor所提供的類型參數了。這就是兩者Constructor不同的原因。

以上就是對WCF序列化的相關介紹。

責任編輯:曹凱 來源: 博客園
相關推薦

2010-02-24 12:41:58

WCF異常處理

2009-11-09 15:06:34

WCF序列化

2009-11-05 16:34:37

WCF序列化

2009-12-22 14:31:27

WCF序列化依賴屬性

2010-02-23 13:03:34

WCF序列化

2009-08-06 11:16:25

C#序列化和反序列化

2009-12-21 16:52:02

WCF序列化

2010-02-24 17:07:26

WCF序列化引擎

2009-11-05 14:25:36

WCF Data Co

2009-09-09 15:47:27

XML序列化和反序列化

2016-12-20 14:55:52

JavaScript鏈式結構序列

2009-08-19 10:13:22

Remoting序列化

2016-09-21 00:15:27

2022-08-06 08:41:18

序列化反序列化Hessian

2024-05-06 00:00:00

C#序列化技術

2021-08-30 12:25:12

Python序列化函數

2011-06-01 15:05:02

序列化反序列化

2009-08-24 17:14:08

C#序列化

2020-12-28 08:29:47

Vuecss框架

2011-05-18 15:20:13

XML
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av在线一区二区 | 日韩欧美一区二区三区免费观看 | 中文字幕国产日韩 | 国产精品久久久久久久久久 | 99re热精品视频国产免费 | 在线观看www| 欧美福利| 91成人影院 | 国产精品精品视频一区二区三区 | 亚洲精品日韩在线 | 亚洲精品在线视频 | 久久综合狠狠综合久久综合88 | 狠狠的干狠狠的操 | 国产欧美一区二区三区在线看 | 99在线视频观看 | 日韩午夜在线观看 | h视频在线观看免费 | 成人高潮片免费视频欧美 | 欧美人成在线视频 | 欧美在线一区二区三区 | 亚洲成人自拍 | 午夜精品久久久久久久99黑人 | 91影院在线观看 | 亚洲一区二区三区免费观看 | 免费av手机在线观看 | 国产成人精品免费 | 一区二区在线 | 国产一区二区免费 | 一区二区伦理电影 | 日韩高清中文字幕 | 欧美 日韩 国产 成人 在线 | 精品国产乱码久久久久久蜜退臀 | 久久国产精品一区二区 | 成人免费大片黄在线播放 | 成人在线精品视频 | 97国产精品视频人人做人人爱 | 久久不卡日韩美女 | 亚洲精品美女 | h视频在线观看免费 | av高清毛片 | 欧美性猛交一区二区三区精品 |