2010-08-07 124 views
3

我有一個XSD模式,我已經生成了一個使用xsd.exe的類,並且我試圖使用XmlSerializer.Deserialize從應該符合XSD模式的XML文件創建該類的一個實例。不幸的是,XML文件有一些額外的元素,模式是不期望的,這導致System.InvalidOperationExceptionDeserialize拋出。XmlSerializer.Deserialize - 忽略不必要的元素?

我試過將<xs:any>元素添加到我的模式中,但這似乎沒有任何區別。

我的問題是:有沒有辦法讓XmlSerializer.Deserialize忽略這些額外的元素?

回答

2

我不認爲有這樣做的選項。您必須修復架構或手動修改由xsd.exe生成的代碼以允許對XML進行反序列化。您還可以嘗試在Visual Studio或任何其他具有模式支持的XML編輯器中打開XML文檔+模式,以修復模式或XML文檔。

+0

我已經習慣了現在不得不修改xsd.exe的輸出......它似乎幾乎沒用。我想我只是自己解析XML而不是從模式中反序列化。由於我決定在重新閱讀您的答案後,我會將其標記爲已接受:)謝謝! – 2011-02-08 00:01:56

5

我通常額外的屬性或字段添加到所有的實體類拿起額外的元素和屬性,看起來像下面的代碼:

[XmlAnyAttribute] 
public XmlAttribute[] AnyAttributes; 

[XmlAnyElement] 
public XmlElement[] AnyElements; 

根據您生成的代碼的複雜性,你可能找不到在每個吸引人的實體上手動插入此代碼。也許只有稍微乏味的是在基類中定義這些屬性並確保所有實體都繼承基礎。

爲了給予公平的歸屬,我在閱讀DasBlog的源代碼時首先介紹了這種模式。

+0

非常有用 - 謝謝! – JoeS 2013-05-30 14:09:55