2009-09-04 79 views
2

我使用.NET序列化類來序列化和記錄傳遞給我的應用程序中的某些功能的參數值。爲此,我需要一種方法來XML序列化通過任何類的屬性值,但會忽略任何不能被XML序列化的屬性(例如,任何Image類型屬性)的獲取XML序列化,以自動忽略不可序列化的屬性

我可以通過我的課程並使用[XmlIgnore]屬性標記這些屬性,但理想情況下我想要一個序列化程序只是跳過這些屬性。

這是可以實現的嗎?

回答

2

您可以使用反射來動態創建XmlAttributeOverrides對象,以便在相關屬性上添加XmlIgnore屬性。您只需實現邏輯以確定給定類型是否符合XML序列化的條件,並遞歸瀏覽對象圖。當你創建完XmlAttributeOverrides對象後,只需將它傳遞給XmlSerializer的構造函數

0

這可能與您的「XMLIgnore」思想一樣高效,但您可以使用XPath將可序列化的部分傳遞給序列化函數。

0

如果你控制一個通用的基類,你可以通過反射來實現 - 否則這可能是一個麻煩。你可以實現一個自定義的Xml序列化方案 - 這並不難,但我懷疑它是值得的。另外,如果你「自動」忽略了所有類的不可序列化的屬性,那麼你需要考慮你所在的級別 - 否則以前的不可序列化的類自己可以序列化,但是隻有他們自己的一些屬性這不是(完全)可序列化的。

0

您應該繼承XmlSerializer並重寫虛擬受保護的Serialize(object,XmlSerializationWriter)方法。你可能需要實現自己的XmlSerializationWriter。

祝你好運!

編輯:檢查Thomas的評論如下。我想他是對的。

+1

我會建議針對該路由:XmlSerializer不會直接執行序列化,它會生成另一個程序集來執行此操作。所以你將不得不改變序列化程序集的生成方式,這可能很難...... – 2009-09-04 09:02:00