首頁 > 後端開發 > C++ > 如何使用 XmlSerializer 成功序列化和反序列化衍生類別的通用列表?

如何使用 XmlSerializer 成功序列化和反序列化衍生類別的通用列表?

Barbara Streisand
發布: 2025-01-11 10:35:46
原創
432 人瀏覽過

How Can I Successfully Serialize and Deserialize Generic Lists of Derived Classes Using XmlSerializer?

使用 XmlSerializer 序列化和反序列化衍生類別的通用列表

XmlSerializer 在序列化包含衍生類別通用清單的物件時提出了挑戰。 這些派生元素的抽象基底類別性質通常會在反序列化期間產生 InvalidOperationException。 讓我們探討一下這個常見問題的解決方案。

解序列化/反序列化問題

有三種有效的策略來克服此限制:

1.使用 [XmlInclude] 屬性

<code class="language-csharp">//1: [XmlInclude(typeof(ChildA))]
//1: [XmlInclude(typeof(ChildB))]
public abstract class ChildClass { /* ... */ }</code>
登入後複製

此方法需要使用每個衍生類別的 ChildClass 屬性註解基底類別 ([XmlInclude])。

2.在該物業上僱用 [XmlElement][XmlArrayItem]

<code class="language-csharp">    //2: [XmlElement("A", Type = typeof(ChildA))]
    //2: [XmlElement("B", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }</code>
登入後複製

此處,[XmlElement][XmlArrayItem] 屬性直接套用於包含衍生類別清單的屬性。 這為序列化器提供了明確的類型資訊。

3.利用[XmlArrayItem]財產

<code class="language-csharp">    //3: [XmlArrayItem("A", Type = typeof(ChildA))]
    //3: [XmlArrayItem("B", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }</code>
登入後複製

此方法鏡像方法 2,但使用 [XmlArrayItem] 而非 [XmlElement],提供略有不同的 XML 結構。

選出正確的方法

每種方法都可以使用衍生類別列表成功序列化和反序列化物件。最佳選擇取決於您的應用程式對 XML 結構和靈活性的特定要求。

以上是如何使用 XmlSerializer 成功序列化和反序列化衍生類別的通用列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板