ホームページ > バックエンド開発 > C++ > XmlSerializer を使用して抽象基本クラスの派生型のリストをシリアル化するにはどうすればよいですか?

XmlSerializer を使用して抽象基本クラスの派生型のリストをシリアル化するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-11 09:47:42
オリジナル
964 人が閲覧しました

How Can I Serialize a List of Abstract Base Class's Derived Types Using XmlSerializer?

XmlSerializer を使用して派生クラスをシリアル化します

XmlSerializer を使用する場合、抽象基本クラスのジェネリック リストを含むオブジェクトをシリアル化すると、問題が発生する可能性があります。この記事では、この問題を解決する方法について説明します。

質問:

派生クラスのリスト (List) を含むオブジェクト。派生クラスは抽象クラスであり、逆シリアル化プロセス中に InvalidOperationException が発生する可能性があります。

解決策:

派生オブジェクトを正常にシリアル化するには、次の 3 つのメソッドを使用できます。

  1. Use [XmlInclude]: この属性を使用すると、シリアル化時に含める派生型を指定できます。派生型の数が少ない状況に適しています。
  2. XmlElement/XmlArrayItem の使用: これらのプロパティを使用すると、プロパティに関連付けられた派生型を直接指定できます。派生型の数が多い状況に適しています。

コード例:

次のコードは 3 つのメソッドを示しています。

<code class="language-csharp">using System;
using System.Collections.Generic;
using System.Xml.Serialization;

// 方法一:使用 [XmlInclude]
[XmlInclude(typeof(ChildA))]
[XmlInclude(typeof(ChildB))]
public abstract class ChildClass {
    public string ChildProp { get; set; }
}

// 方法二:使用 XmlElement
public class MyWrapper {
    [XmlElement("ChildA", Type = typeof(ChildA))]
    [XmlElement("ChildB", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }
}

// 方法三:使用 XmlArrayItem
public class MyWrapper2 {
    [XmlArrayItem("ChildA", Type = typeof(ChildA))]
    [XmlArrayItem("ChildB", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }
}

public class ChildA : ChildClass {
    public string AProp { get; set; }
}

public class ChildB : ChildClass {
    public string BProp { get; set; }
}</code>
ログイン後にコピー

必須の属性ペアのコメントを解除すると、ニーズに最も適したソリューションを選択できます。

以上がXmlSerializer を使用して抽象基本クラスの派生型のリストをシリアル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート