發(fā)文章
發(fā)文工具
撰寫
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
DataContractAttribute 與 DataMenberAttribute
DataContractAttribute該特性只能用于枚舉、類和結(jié)構(gòu)體,而不能用于接口;又因為DataContractAttribute是不可以被繼承的,所以要所有作為數(shù)據(jù)契約的類型自身必須有這么一個特性;而且一個類型上只能有一個DataContractAttribute特性;(因為DataContractAttribute的AttributeUsage中AllowMultiple屬性為False);DataContractAttribute僅僅包含三個屬性成員;分別為Name(數(shù)據(jù)契約名稱)、Namespace(命名空間)、IsReference(表示在進(jìn)行序列化的時候是否保持對象現(xiàn)有的結(jié)構(gòu),該屬性默認(rèn)值為False);
DataMenberAttribute該特性只能應(yīng)用在字段和屬性上;其有四個屬性:分別為Name(數(shù)據(jù)成員的名稱,默認(rèn)為字段或?qū)傩缘拿Q)、Order(相應(yīng)的數(shù)據(jù)成員在最終序列化的XML中出現(xiàn)的位置,Order值越小越靠前默認(rèn)值為-1)、IsRequired(表明屬性成員是否是必需的成員,默認(rèn)值為false)、EmitDefaultValue(表明在數(shù)據(jù)成員的值等級于默認(rèn)值的情況下,是否還需要將其序列化到最終的XML中,默認(rèn)值為true;表示默認(rèn)值會參與序列化)
數(shù)據(jù)契約和數(shù)據(jù)成員序列化只跟是否應(yīng)用的DataContractAttribute 與 DataMenberAttribute特性有關(guān);與類型或成員的限制修飾符無關(guān)(public,private等);DataContractSerializer具有一個只讀的MaxItemsInObjectGraph屬性表示允許被序列化或反序列化對象的數(shù)量上限(可以防止黑客通過生成大容量的數(shù)據(jù)頻繁地對服務(wù)器發(fā)送請求,最終導(dǎo)致服務(wù)器不堪重負(fù)而崩潰);[P180]
已知類型
由于托管對象的結(jié)構(gòu)是通過CLR類型來描述,所以DataContractAttribute在進(jìn)行序列化的時候必須先確定所有對象的真實類型;NET的類型可以分為聲明類型和真實類型兩種;比如類型實現(xiàn)的接口或抽象類,當(dāng)我們使用基于接口或抽象類創(chuàng)建的DataContractAttribute去序列化一個實現(xiàn)了該接口或繼承該抽象類的實例時,往往會因為無法識別對象的真實類型造成不能正常序列化;方法一:可以在數(shù)據(jù)契約中聲明其類型[KnowType(typeof(類型))];方法二:可以采用配置[P189];方法三:可以采用ServiceKnownTypeAttribute特性;[P191]
來自: 昵稱10504424 > 《Wcf》
0條評論
發(fā)表
請遵守用戶 評論公約
數(shù)據(jù)契約(DataContract)
數(shù)據(jù)契約(DataContract)上面這段代碼把UserInfo類聲明為DataContract,將UserName、Age、Location這3個屬性聲明為DataMember(數(shù)據(jù)成員)。DataContract也支持Name/Namespace屬性,如同ServiceContra...
EndPoint(ABC)
當(dāng)遇到數(shù)據(jù)類成員中標(biāo)記有類似[XmlAttribute]屬性這樣的細(xì)致設(shè)置生成xml格式的屬性時,這時WCF infrastructure需要調(diào)用XmlSerializer序...
C++的反射和序列化
有了反射做序列化相當(dāng)?shù)姆奖? 如果沒有的話就像GameBryo那樣做也湊合把Name(或CRC)與Value一起序列化后就可以做到版本的兼容, 對于成員屬性改動頻繁的情況很實用對于重復(fù)性的數(shù)據(jù)的二進(jìn)制序列化可以進(jìn)...
java注解
以上定義出來的注解就是一個最簡單的注解了,但這樣的注解意義不大,因為注解中沒有任何內(nèi)容,就好像 我們定義一個類而這個類中沒有任何...
WCF中的序列化[上篇]
實現(xiàn)PropertyChangedBase時c# – caliburn.micro序列化問題
實現(xiàn)PropertyChangedBase時c# – caliburn.micro序列化問題。public class Person{ public int Id {get;public class Person : PropertyChangedBase{ public int Id {get;public string FirstName { ge...
Java面試(二)
Java面試(二)11.Java序列化和反序列化序列化(Serialize) 把內(nèi)存中的Java對象轉(zhuǎn)換成平臺無關(guān)的二進(jìn)制流的過程稱為對象的序列化 對象的序列化主要有兩種用途: 1)把對象的字節(jié)序列永久的保存...
為注解增加屬性
為注解增加屬性 下面我們來為注解添加屬性.為注解添加屬性就類似于為接口添加屬性. 使用注解的屬性 有一種情況,不需要寫屬性名。但...
易語言擴(kuò)展界面支持庫 工具條 窗口單元 - 易語言電腦技術(shù) - 高級電腦技術(shù) - 揮劍斬浮...
調(diào)用格式: 〈整數(shù)型〉 對象.插入按鈕 ([插入位置],[類型],[圖片索引],[標(biāo)題],[動態(tài)提示文本],[按鈕狀態(tài)])其中"選中"狀態(tài)在類型為多選按鈕或單選按鈕時有效,"按下...
微信掃碼,在手機(jī)上查看選中內(nèi)容