3 回答

TA貢獻1847條經(jīng)驗 獲得超11個贊
是,GetSchema()應(yīng)該返回空.
IXmlSerializable.GetSchema方法此方法是保留的,不應(yīng)使用。在實現(xiàn)IXmlSerialable接口時,應(yīng)從此方法返回一個空引用(在VisualBasic中為Nothing),如果需要指定自定義架構(gòu),則應(yīng)將XmlSchemaProviderAttribute應(yīng)用于該類。
對于讀和寫,對象元素已經(jīng)寫好了,所以您不需要在寫中添加外部元素。例如,您可以在這兩個屬性中開始讀取/寫入屬性。
為寫:
您提供的WriteXml實現(xiàn)應(yīng)該寫出對象的XML表示。該框架編寫一個包裝器元素,并在其啟動后定位XML編寫器。您的實現(xiàn)可以編寫其內(nèi)容,包括子元素。然后,框架關(guān)閉包裝器元素。
而為了朗讀,閱讀:
ReadXml方法必須使用WriteXml方法編寫的信息重新構(gòu)造對象。
調(diào)用此方法時,讀取器位于包裝類型信息的元素的開頭。也就是說,就在表示序列化對象的開始標(biāo)記之前。當(dāng)此方法返回時,它必須從頭到尾讀取整個元素,包括其所有內(nèi)容。與WriteXml方法不同,框架不會自動處理包裝器元素。您的實現(xiàn)必須這樣做。不遵守這些定位規(guī)則可能會導(dǎo)致代碼產(chǎn)生意外的運行時異?;驌p壞的數(shù)據(jù)。
我同意這一點有點不清楚,但歸根結(jié)底是“這是你的工作Read()
包裝器的結(jié)束元素標(biāo)記“。

TA貢獻1865條經(jīng)驗 獲得超7個贊
我想補充一點,在我從事的一個項目中,我們發(fā)現(xiàn)手動編寫外部XML元素是很尷尬的,這也會導(dǎo)致相同類型的對象的XML元素名稱不一致。
我們的解決辦法是定義我們自己的IXmlSerializable
接口,派生自SystemOne,其中添加了一個名為WriteOuterXml()
..可以猜到,這個方法只需編寫外部元素,然后調(diào)用WriteXml()
,然后編寫元素的結(jié)尾。當(dāng)然,SystemXML序列化程序不會調(diào)用此方法,因此只有在我們自己進行序列化時才會有用,因此在您的情況下可能會有幫助,也可能沒有幫助。類似地,我們添加了一個ReadContentXml()
方法,它沒有讀取外部元素,只讀取其內(nèi)容。
- 3 回答
- 0 關(guān)注
- 455 瀏覽
添加回答
舉報