十五天精通WCF——第十二天 說說wcf中的那幾種序列化

  

  咱們都知道wcf是由信道棧組成的,在咱們傳輸的參數走到傳輸信道層以前,先須要通過序列化的過程,也就是將參數序列化爲message這篇編程

咱們就來講說這裏的序列化,蠻有意思的,可能初學者也明白,在wcf中默認的序列化是DataContractSerializer,確實是這樣,不過wcf在信道中編碼

其實不只僅支持DataContractSerializer,它還支持其他類型的序列化,好比XmlSerializer,NetDataContractSerializer以及DataContractJsonspa

Serializer,下面咱們一塊兒來見證下。rest

 

1. XmlSerializercode

   要了解XmlSerializer,咱們先來簡單看看NetDataContractSerializer,在前面的文章中,我也說過DataContract就是將咱們的model序列化爲orm

XSD,第二點就是使用DataContract的原則就是你必須在Model上加DataContract,並且在你要序列化的字段上加DataMember這樣纔可以正確的序列對象

化,爲了演示,咱們先看看默認的序列化Model會變成啥樣?blog

 1     [DataContract]
 2     public class Student
 3     {
 4         [DataMember]
 5         public int ID { get; set; }
 6 
 7         [DataMember]
 8         public string Name { get; set; }
 9 
10         [DataMember]
11         public string SNS { get; set; }
12     }

可是在有些狀況下,你可能並不適合用DataContract,好比Model是第三方提供的,那麼這個時候你的Model可能就不會有DataContract標記,那這樣接口

wcf就沒法進行序列化,那我若是非要保證wcf能正常跑起來的話,還有其餘好的辦法嗎???固然了,確定有辦法,這就比如談戀愛同樣,總不能get

在一棵樹上吊死吧,沒人誰離不開誰,也不會誰離開了誰會死,天涯何處無芳草,男兒何患無妻,對吧。Wcf中也同樣,既然DataContract用不了,自

然會有替代它的人,那這我的就是XmlSerializer,使用起來也很簡單,就是在契約方法上面加上XmlSerializerFormat便可,而後咱們把Model

DataContract所有去掉。

 

是否是很簡單,下面咱們就要驗證一下,看看這個Format是否進入到了這個Operation的Behavior中,

 

從上面的圖中,你也看到了, XmlSerializerFormat 已經被注入到Behavior中,而且是由類XmlSerializerOperationBehavior代爲處理。

 

接下來,咱們用fiddler監視一下,看看Message中的Body是否真的按照XmlSerializer 序列化了。

有沒有看到,此次Message的Body已經和文章開頭處的Message不同了。

 

2. NetDataContract

       這個玩意也沒什麼好說的,光從表面上看,它和DataContract惟一不一樣的地方就是多了一個Net,因此你大概也能猜到,這個功能大概和DataCont

ract同樣,只不過比DataContract多了一個程序集保存,那這句話是什麼意思呢???就是NetDataContract會把程序集的命名空間和類名都保存到XSD中,

在反序列化的過程當中必需要用一樣的程序集才能解開,其實無論咱們是作SOA或者面向對象編程都講究接口編程,而NetDataContract給你的印象就是面

向對象編程,固然這也有好處,好比說若是把程序集帶進去就好像祕鑰同樣,必須有它才能解開,對吧,因此致使wcf項目組並不對NetDataContract感冒

,因此在實際應用上也不建議使用。

 

3. DataContractJsonSerializer

   看到上面這個帶有Json的字樣,我想你們都知道這玩意是幹什麼的???沒錯,他就是將咱們的Model序列化成Json,這在wcfrest編碼使用的很廣,

若是你們有興趣的話,我在下一篇會詳細描述,這裏咱們先簡單看一看。

 

好了,這一篇就說這些了,洗洗睡了。。。

相關文章
相關標籤/搜索