現在、コードを介してユーザー インターフェイスを簡単に定義できる XNA エンジン用の UI フレームワークを作成しています。XML経由でユーザーインターフェースを定義できるようにすることで、使いやすくすることを検討しています。
私が立ち往生しているのは、逆シリアル化クラスの作成です。問題は、ルートにアイテムのコレクションが含まれており、一部のアイテムに 1 つ以上の子アイテムが含まれている可能性があることです。現在、次のようなものがあります。
[XmlRoot]
public class RootClass
{
[XmlArray]
[XmlArrayItem("ClassA", typeof(ClassA)]
[XmlArrayItem("ClassB", typeof(ClassB)]
public List<BaseClass> Classes { get; set; }
}
public class BaseClass
{
[XmlAttribute]
public string Name { get; set;
}
public class ClassA : BaseClass
{
[XmlAttribute]
public string AValue { get; set;
[XmlArray]
[XmlArrayItem("ClassA", typeof(ClassA)]
[XmlArrayItem("ClassB", typeof(ClassB)]
public List<BaseClass> Children { get; set; }
}
public class ClassB : BaseClass
{
[XmlAttribute]
public string BValue { get; set;
[XmlElement("ClassA", typeof(ClassA)]
[XmlElement("ClassB", typeof(ClassB)]
public BaseClass SingleChild { get; set; }
}
これの意図は、ルートには任意の数のサブクラスを含めることがClassA
できますが、要素には任意の数の子クラスを含めることができ、ClassB
型には単一の子クラスを含めることができるということです。
から継承する新しいクラスBaseClass
( など) を追加すると、プロパティと使用される他のすべてのリストにClassC
新しいXmlArrayItem
属性を追加する必要があるため、これには大きな保守性の問題があります。クラスのリストも含まれている場合は、属性リストを維持するために必要な 3 つのポイントです。また、単一のクラス値に新しい属性が追加されていることを確認する必要もあります。RootClass.Classes
ClassC
XmlArrayItem
[XmlElement]
すべてのデシリアライゼーション クラスでこれらの継承マッピングを繰り返さなくても済む簡単な方法はありますか?