成人免费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-12-21 16:52:02

WCF序列化

2009-08-06 11:16:25

C#序列化和反序列化

2010-02-24 17:07:26

WCF序列化引擎

2009-11-05 14:25:36

WCF Data Co

2009-09-09 15:47:27

XML序列化和反序列化

2022-08-06 08:41:18

序列化反序列化Hessian

2016-12-20 14:55:52

JavaScript鏈式結構序列

2009-08-19 10:13:22

Remoting序列化

2016-09-21 00:15:27

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#序列化

2010-02-24 17:41:05

WCF集合反序列化

2020-12-28 08:29:47

Vuecss框架
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩综合在线 | 男人的天堂亚洲 | www.国产精| 国产高清一区二区 | 日日夜夜精品视频 | av色站| 最新国产在线 | www.日韩av.com| 久久久123| 久草免费在线视频 | 国产在线色 | 国产精品久久久av | 久久久久久国产精品免费免费 | 亚洲一区二区三区在线播放 | 精品欧美一区二区三区久久久 | 在线观看一区 | 久久久高清| 羞羞视频在线观看网站 | 亚洲视频一区在线观看 | 365夜爽爽欧美性午夜免费视频 | 一区二区不卡视频 | 青青草国产在线观看 | 亚洲v日韩v综合v精品v | 一区二区中文字幕 | av网站在线免费观看 | 操亚洲 | 激情五月综合 | 日本不卡一区二区三区在线观看 | 色婷婷激情综合 | 欧美精品久久久 | 国产91精品久久久久久久网曝门 | 久久久视频在线 | 亚洲免费观看视频 | 欧美一区二区激情三区 | 成人一区二区三区在线观看 | 啪一啪| 2018国产精品| 99精品欧美一区二区蜜桃免费 | 国产欧美日韩一区二区三区在线 | 欧美国产精品一区二区三区 | 欧美日韩中文国产一区发布 |