0

ここで複数の質問と回答に出くわしましたが、私の状況に固有のものはありません。

クラス「エンティティ」があり、そこから拡張する複数のクラスがあります。シリアル化してリストにヒットさせ、ノード名の各項目のタイプを理解して使用するようにします。

これで、コメントアウトされたものを使用できます (メイン クラスで各配列項目を定義し、[XmlArrayItem("Subclass1", typeof(subclass1)] を使用してそのような項目の名前を定義します)。サブクラスが多すぎて、メインエンティティクラスのすべてを定義できなくなります...とにかくこれを達成する方法はありますか?

サブクラスなどに [XmlType(TypeName="...")] を使用しようとしましたが、うまくいきませんでした。

[Serializable]
[XmlInclude(typeof(Subclass1))]
[XmlRoot("Entity")]
public class Entity{

    [XmlArray("CausedBy")]
    //[XmlArrayItem("Subclass1", typeof(subclass1))]
    //[XmlArrayItem("Sublcass2", typeof(Subclass2))]
    public List<Entity> CausedBy { get; set; }

}

[Serializable]
[XmlRoot("Subclass1")]
[XmlInclude(typeof(Subclass2))]
public class Subclass1:Entity{
    //Code...
}

[Serializable]
[XmlRoot("Subclass2")]
public class Subclass2:Subclass1{
  //Code...
}

エンティティを作成し、Subclass1 と Subclass2 を「CausedBy」クラスのリストに追加した後に上記のコードをシリアル化すると、次のようになります。

<Entity>
  <CausedBy>
    <Entity ... xsi:type="SubClass1" />
    <Entity ... xsi:type="SubClass2" />
   </CausedBy>
<Entity>

出力を表示したい:

 <Entity>
      <CausedBy>
        <SubClass1 .../>
        <SubClass2 .../>
       </CausedBy>
    <Entity>
4

2 に答える 2