我有一个为 XNA 引擎编写的 UI 框架,目前可以通过代码轻松定义用户界面。我正在考虑通过允许通过 XML 定义用户界面来使其更易于使用。
我坚持的是创建反序列化类。问题是根包含一组项目,而某些项目可能包含一个或多个子项目。现在我有类似的东西:
[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]
有没有一种更简单的方法可以避免在每个反序列化类中重复这些继承映射?