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

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

DDD
DDDオリジナル
2025-01-11 09:53:43136ブラウズ

How Can I Serialize Derived Classes Using XmlSerializer?

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

開発者は、XmlSerializer を使用して、プロパティの一部として抽象クラスを含むオブジェクトをシリアル化しようとすると、InvalidOperationException が発生する可能性があります。この障害を克服するには、シリアル化中に派生クラスを効率的に処理する必要があります。

解決策

XmlSerializer は、この問題を解決する 3 つのメソッドを提供します。

  1. [XmlInclude] 属性: 基本クラスに適用され、シリアライザーに派生クラスが含まれていることを示します。

    <code class="language-csharp"> [XmlInclude(typeof(ChildA))]
     [XmlInclude(typeof(ChildB))]
     public abstract class ChildClass
     {
         public string ChildProp { get; set; }
     }</code>
  2. XmlElement/XmlArrayItem 属性: これらの属性は、各派生クラス要素の型を指定するリストを持つプロパティに適用する必要があります。

    <code class="language-csharp"> [XmlElement("A", Type = typeof(ChildA))]
     [XmlElement("B", Type = typeof(ChildB))]
     public List<ChildClass> Data { get; set; }</code>
  3. XmlArrayItem 属性: リスト自体に配置され、リストに含めることができる要素のタイプを定義します。

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

これらのオプションのいずれかを選択し、提供されたコード サンプル内の対応するコード ブロックのコメントを解除することで、開発者は派生クラスを含むオブジェクトを正常にシリアル化および逆シリアル化できます。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。