<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                我們都知道wcf是由信道棧組成的,在我們傳輸的參數走到傳輸信道層之前,先需要經過序列化的過程,也就是將參數序列化為message,這篇 我們就來說說這里的序列化,蠻有意思的,可能初學者也明白,在wcf中默認的序列化是DataContractSerializer,確實是這樣,不過wcf在信道中 其實不僅僅支持DataContractSerializer,它還支持其他類型的序列化,比如XmlSerializer,NetDataContractSerializer以及DataContractJson Serializer,下面我們一起來見證下。 1.?XmlSerializer ???要了解XmlSerializer,我們先來簡單看看NetDataContractSerializer,在前面的文章中,我也說過DataContract就是將我們的model序列化為 XSD,第二點就是使用DataContract的原則就是你必須在Model上加DataContract,而且在你要序列化的字段上加DataMember。這樣才能夠正確的序列 化,為了演示,我們先看看默認的序列化Model會變成啥樣? ~~~ 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 } ~~~ ![](https://box.kancloud.cn/2015-08-04_55c0b67f74828.png) 但是在有些情況下,你可能并不適合用DataContract,比如Model是第三方提供的,那么這個時候你的Model可能就不會有DataContract標記,那這樣的 話wcf就無法進行序列化,那我如果非要保證wcf能正常跑起來的話,還有其他好的辦法嗎???當然了,肯定有辦法,這就好比談戀愛一樣,總不能 在一棵樹上吊死吧,沒人誰離不開誰,也不會誰離開了誰會死,天涯何處無芳草,男兒何患無妻,對吧。Wcf中也一樣,既然DataContract用不了,自 然會有替代它的人,那這個人就是XmlSerializer,使用起來也很簡單,就是在契約方法上面加上XmlSerializerFormat即可,然后我們把Model的 DataContract全部去掉。 ![](https://box.kancloud.cn/2015-08-04_55c0b67fd7f54.png) 是不是很簡單,下面我們就要驗證一下,看看這個Format是否進入到了這個Operation的Behavior中, ![](https://box.kancloud.cn/2015-08-04_55c0b6807efdd.png) 從上面的圖中,你也看到了,?XmlSerializerFormat?已經被注入到Behavior中,并且是由類XmlSerializerOperationBehavior代為處理。 ![](https://box.kancloud.cn/2015-08-04_55c0b6809ea3d.png) 接下來,我們用fiddler監視一下,看看Message中的Body是否真的按照XmlSerializer?序列化了。 ![](https://box.kancloud.cn/2015-08-04_55c0b681c2eb1.png) 有沒有看到,這次Message的Body已經和文章開頭處的Message不一樣了。 2\. NetDataContract ? ? ? ?這個玩意也沒什么好說的,光從表面上看,它和DataContract唯一不同的地方就是多了一個Net,所以你大概也能猜到,這個功能大概和DataCont ract一樣,只不過比DataContract多了一個程序集保存,那這句話是什么意思呢???就是NetDataContract會把程序集的命名空間和類名都保存到XSD中, 在反序列化的過程中必須要用同樣的程序集才能解開,其實不管我們是做SOA或者面向對象編程都講究接口編程,而NetDataContract給你的印象就是面 向對象編程,當然這也有好處,比如說如果把程序集帶進去就好像秘鑰一樣,必須有它才能解開,對吧,所以導致wcf項目組并不對NetDataContract感冒 ,所以在實際應用上也不建議使用。 ![](https://box.kancloud.cn/2015-08-04_55c0b6822c960.png) 3.?DataContractJsonSerializer ? ?看到上面這個帶有Json的字樣,我想大家都知道這玩意是干什么的???沒錯,他就是將我們的Model序列化成Json,這在wcf的rest編碼使用的很廣, 如果大家有興趣的話,我在下一篇會詳細描述,這里我們先簡單看一看。 ![](https://box.kancloud.cn/2015-08-04_55c0b6830dee7.png) 好了,這一篇就說這些了,洗洗睡了。。。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看