第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么xml-可序列化類需要無(wú)參數(shù)構(gòu)造函數(shù)?

為什么xml-可序列化類需要無(wú)參數(shù)構(gòu)造函數(shù)?

白衣染霜花 2019-06-25 14:54:39
為什么xml-可序列化類需要無(wú)參數(shù)構(gòu)造函數(shù)?我正在編寫(xiě)代碼來(lái)執(zhí)行XML序列化。具有以下功能。public static string SerializeToXml(object obj){     XmlSerializer serializer = new XmlSerializer(obj.GetType());     using (StringWriter writer = new StringWriter())     {         serializer.Serialize(writer, obj);         return writer.ToString();     }}如果參數(shù)是一個(gè)沒(méi)有無(wú)參數(shù)構(gòu)造函數(shù)的類的實(shí)例,它將拋出一個(gè)異常。未處理的異常:System.InvalidOperationException:CSharpConsole.foo無(wú)法序列化,因?yàn)樗鼪](méi)有無(wú)參數(shù)的構(gòu)造函數(shù)。在System.Xml.Serialization.TypeDesc.CheckSupported()(System.Xml.Serialization.TypeScope.GetTypeDesc(Type類型)、MemberInfoSource(System.Xml.Serialization.ModelScope.GetTypeModel(Type類型)、System.Xml.Serialization.ModelScope.GetTypeModel(Type類型(System.Xml.Serialization.ModelScope.GetTypeModel(Type類型)、System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(Type類型(布爾直接引用)、System.Xml.Serialization.XmlSerializer..ctor(Type類型下的XmlRootAttribute根、StringdefaultNamesspace(System.Xml.Serialization.XmlSerializer..ctor(Type類型)、StringdefaultName空間(System.Xml.Serialization.XmlSerializer..ctor(Type類型)為什么必須有一個(gè)無(wú)參數(shù)構(gòu)造函數(shù)才能使XML序列化成功?編輯:謝謝cfeduke的回答。無(wú)參數(shù)構(gòu)造函數(shù)可以是私有的,也可以是內(nèi)部的。
查看完整描述

3 回答

?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

在對(duì)象反序列化期間,負(fù)責(zé)反序列化對(duì)象的類創(chuàng)建序列化類的實(shí)例,然后在獲取要填充的實(shí)例后才開(kāi)始填充序列化字段和屬性。

你可以讓你的構(gòu)造函數(shù)privateinternal如果你愿意,只要它沒(méi)有參數(shù)。


查看完整回答
反對(duì) 回復(fù) 2019-06-25
?
皈依舞

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊

這是對(duì)…的限制XmlSerializer..請(qǐng)注意BinaryFormatterDataContractSerializer 不要需要這樣做-他們可以創(chuàng)建一個(gè)未初始化的對(duì)象的乙醚,并在反序列化期間初始化它。

由于您使用的是xml,因此可以考慮使用DataContractSerializer[DataContract]/[DataMember,但是請(qǐng)注意,這會(huì)更改模式(例如,沒(méi)有等效的[XmlAttribute]-一切都成為要素)。

更新:如果你真的想知道,BinaryFormatter等用途FormatterServices.GetUninitializedObject()若要?jiǎng)?chuàng)建對(duì)象而不調(diào)用構(gòu)造函數(shù),請(qǐng)執(zhí)行以下操作??赡芎芪kU(xiǎn);我不建議經(jīng)常使用它;-p還可以看到MSDN上的注釋:

由于對(duì)象的新實(shí)例初始化為零,并且沒(méi)有運(yùn)行構(gòu)造函數(shù),因此該對(duì)象可能不表示該對(duì)象認(rèn)為有效的狀態(tài)。只有當(dāng)用戶打算立即填充所有字段時(shí),才應(yīng)使用當(dāng)前方法進(jìn)行反序列化。它不會(huì)創(chuàng)建未初始化的字符串,因?yàn)閯?chuàng)建不可變類型的空實(shí)例沒(méi)有任何用途。

我有我的自己序列化引擎,但我不打算讓它使用FormatterServices我很喜歡知道構(gòu)造函數(shù)(任何構(gòu)造函數(shù))實(shí)際上已經(jīng)執(zhí)行。


查看完整回答
反對(duì) 回復(fù) 2019-06-25
  • 3 回答
  • 0 關(guān)注
  • 1008 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)