XmlSerializer を使用して派生クラスをシリアル化します
開発者は、XmlSerializer を使用して、プロパティの一部として抽象クラスを含むオブジェクトをシリアル化しようとすると、InvalidOperationException が発生する可能性があります。この障害を克服するには、シリアル化中に派生クラスを効率的に処理する必要があります。
解決策
XmlSerializer は、この問題を解決する 3 つのメソッドを提供します。
[XmlInclude]
属性: 基本クラスに適用され、シリアライザーに派生クラスが含まれていることを示します。
<code class="language-csharp"> [XmlInclude(typeof(ChildA))] [XmlInclude(typeof(ChildB))] public abstract class ChildClass { public string ChildProp { get; set; } }</code>
XmlElement
/XmlArrayItem
属性: これらの属性は、各派生クラス要素の型を指定するリストを持つプロパティに適用する必要があります。
<code class="language-csharp"> [XmlElement("A", Type = typeof(ChildA))] [XmlElement("B", Type = typeof(ChildB))] public List<ChildClass> Data { get; set; }</code>
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 サイトの他の関連記事を参照してください。