日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WCF学习笔记之序列化

發布時間:2023/12/2 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WCF学习笔记之序列化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DataContractAttribute 與 DataMenberAttribute

?

DataContractAttribute該特性只能用于枚舉、類和結構體,而不能用于接口;又因為DataContractAttribute是不可以被繼承的,所以要所有作為數據契約的類型自身必須有這么一個特性;而且一個類型上只能有一個DataContractAttribute特性;(因為DataContractAttribute的AttributeUsage中AllowMultiple屬性為False);DataContractAttribute僅僅包含三個屬性成員;分別為Name(數據契約名稱)、Namespace(命名空間)、IsReference(表示在進行序列化的時候是否保持對象現有的結構,該屬性默認值為False);

?

DataMenberAttribute該特性只能應用在字段和屬性上;其有四個屬性:分別為Name(數據成員的名稱,默認為字段或屬性的名稱)、Order(相應的數據成員在最終序列化的XML中出現的位置,Order值越小越靠前默認值為-1)、IsRequired(表明屬性成員是否是必需的成員,默認值為false)、EmitDefaultValue(表明在數據成員的值等級于默認值的情況下,是否還需要將其序列化到最終的XML中,默認值為true;表示默認值會參與序列化)

?

數據契約和數據成員序列化只跟是否應用的DataContractAttribute 與 DataMenberAttribute特性有關;與類型或成員的限制修飾符無關(public,private等);DataContractSerializer具有一個只讀的MaxItemsInObjectGraph屬性表示允許被序列化或反序列化對象的數量上限(可以防止黑客通過生成大容量的數據頻繁地對服務器發送請求,最終導致服務器不堪重負而崩潰);[P180]

?

已知類型

由于托管對象的結構是通過CLR類型來描述,所以DataContractAttribute在進行序列化的時候必須先確定所有對象的真實類型;NET的類型可以分為聲明類型和真實類型兩種;比如類型實現的接口或抽象類,當我們使用基于接口或抽象類創建的DataContractAttribute去序列化一個實現了該接口或繼承該抽象類的實例時,往往會因為無法識別對象的真實類型造成不能正常序列化;方法一:可以在數據契約中聲明其類型[KnowType(typeof(類型))];方法二:可以采用配置[P189];方法三:可以采用ServiceKnownTypeAttribute特性;[P191]

?

轉載于:https://www.cnblogs.com/wujy/p/3188512.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的WCF学习笔记之序列化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。