首頁 >後端開發 >C++ >如何使用 XmlSerializer 序列化通用清單中的衍生類別?

如何使用 XmlSerializer 序列化通用清單中的衍生類別?

Patricia Arquette
Patricia Arquette原創
2025-01-11 10:42:45533瀏覽

How to Serialize Derived Classes within Generic Lists using XmlSerializer?

使用XmlSerializer序列化衍生類別

當使用XmlSerializer序列化包含抽象類別衍生類別的泛型清單的物件時,使用者可能會在反序列化過程中遇到InvalidOperationException異常。解決此問題需要採用特定技術來處理派生物件的序列化。

有三種有效的方法:

  1. [XmlInclude] 屬性: 在抽象類別宣告之前套用[XmlInclude]屬性,包含每個衍生類別類型。這確保了序列化器知道如何處理這些特定的派生類型。
  2. XmlElement/XmlArrayItem 屬性: 在包含清單的屬性上使用[XmlElement][XmlArrayItem]屬性。在這些屬性中指定衍生類別類型,以指示序列化器識別和反序列化物件。
  3. 兩種方法的組合: 透過在抽象類別上使用[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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn