采用以下示例代码:
public abstract class ElementBase
{
}
public class ElementOne : ElementBase
{
}
public class ElementTwo : ElementBase
{
[XmlElement("element-one", typeof(ElementOne))]
[XmlElement("element-two", typeof(ElementTwo))]
public ElementBase[] SubElements { get; set; }
}
[XmlRoot("root-element")]
public class RootElement
{
[XmlElement("element-one", typeof(ElementOne))]
[XmlElement("element-two", typeof(ElementTwo))]
public ElementBase[] SubElements { get; set;}
}
ElementOne.SubElements
和ElementTwo.SubElements
上的属性需要保持同步(即,添加到一个的属性需要添加到另一个,并且参数需要保持不变),原因是这就是在xml中,<element-one>
和元素都可以显示为<root-element>
和<element-two>
的子元素。元素可以是任何顺序,顺序很重要。此外,将来可能会有更多的子元素。它当前编码的方式会使维护繁琐且容易出错,因为需要为属性维护两个单独的位置。
有没有办法让这些属性&#34;共享&#34;两个属性之间,这样一个编辑会影响他们两个?我尝试了以下方法:
public class CommomAttribute : Attribute
{
public XmlElementAttribute f = new XmlElementAttribute("element-one", typeof(ElementOne));
public XmlElementAttribute l = new XmlElementAttribute("element-two", typeof(ElementTwo));
}
然后我替换了上述类中的冗余属性&#39;具有单个[Command]的属性。这没用。
另一个问题:是否有更优雅的方法来解决这个问题?
答案 0 :(得分:1)
如果您不介意深入一级以获取子元素项,您可以试试这个:
public abstract class ElementBase
{
}
public class ElementOne : ElementBase
{
}
public class ElementTwo : ElementBase
{
public SubElementList SubElements { get; set; }
}
public class SubElementList
{
[XmlElement("element-one", typeof(ElementOne))]
[XmlElement("element-two", typeof(ElementTwo))]
public ElementBase[] Items { get; set; }
}
[XmlRoot("root-element")]
public class RootElement
{
public SubElementList SubElements { get; set; }
}
答案 1 :(得分:0)
离开我的头顶,我会做以下事情:
这样,两个对象上的SubElements将具有相同的内存地址(相同的实例)。因此,如果有人从One获取SubElements的实例,则修改index [2]处的对象(例如),它也会影响SubElements at Two。