使用XmlSerializer序列化衍生類別
當使用XmlSerializer序列化包含抽象類別衍生類別的泛型清單的物件時,使用者可能會在反序列化過程中遇到InvalidOperationException異常。解決此問題需要採用特定技術來處理派生物件的序列化。
解
有三種有效的方法:
[XmlInclude]
屬性: 在抽象類別宣告之前套用[XmlInclude]
屬性,包含每個衍生類別類型。這確保了序列化器知道如何處理這些特定的派生類型。 XmlElement
/XmlArrayItem
屬性: 在包含清單的屬性上使用[XmlElement]
或[XmlArrayItem]
屬性。在這些屬性中指定衍生類別類型,以指示序列化器識別和反序列化物件。 [XmlInclude]
和在屬性上使用[XmlElement]
或[XmlArrayItem]
來結合這兩種方法,從而提供明確和隱式類型處理。 以下程式碼片段提供了使用每種方法的詳細實作範例:
<code class="language-csharp">// 1: [XmlInclude(typeof(ChildA))] // 1: [XmlInclude(typeof(ChildB))] public abstract class ChildClass { public string ChildProp { get; set; } } // 2: [XmlElement("A", Type = typeof(ChildA))] // 2: [XmlElement("B", Type = typeof(ChildB))] // 3: [XmlArrayItem("A", Type = typeof(ChildA))] // 3: [XmlArrayItem("B", Type = typeof(ChildB))] public List<ChildClass> Data { get; set; } // ... 序列化和反序列化代码在此处 ...</code>
選擇首選方法並取消對應程式碼段的註解以實現衍生類別的序列化。
以上是如何使用 XmlSerializer 序列化通用清單中的衍生類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!