我是c#的全新(第2天)所以如果我的术语有点偏离,我会提前道歉。
考虑以下XML和类模型:
<Page label="Page 1.1">
<Group label="Group 1.1.1"></Group>
<Group label="Group 1.1.2"></Group>
<Text label="Text 1.1.1"></Text>
<Text label="Text 1.1.2"></Text>
</Page>
public class AbstractElementModel
{
[XmlAttributeAttribute()]
public string label;
}
[Serializable]
public class Page:AbstractElementModel
{
[XmlArrayItem(typeof(Group)),
XmlArrayItem(typeof(Text))]
public AbstractElementModel[] content;
}
(未显示组和文本模型,对于此示例,它们是扩展AbstractElementModel的空白类)
我希望能够将任何Group或Text实例推送到内容列表中。但是,当反序列化XML文档时,内容为空。我确实注意到,如果我按如下方式构造XML,它会起作用:
<Page label="Page 1.1">
<content>
<Group label="Group 1.1.1"></Group>
<Group label="Group 1.1.2"></Group>
<Text label="Text 1.1.1"></Text>
<Text label="Text 1.1.2"></Text>
</content>
</Page>
但是,我需要能够解析XML结构,如第一个示例所示。
实现这个目标的最佳方式是什么?
谢谢你的时间!
修改的
更新了XML结构以使问题更加清晰。
答案 0 :(得分:3)
如果您不想要包装器元素,请使用XmlElement:
public class Page:AbstractElementModel
{
[XmlElement("Group", typeof(Group))]
[XmlElement("Text", typeof(Text))]
public AbstractElementModel[] content;
}
其他说明:
[Serializable]
答案 1 :(得分:0)
鉴于您可能在Page下有多个相同类型的节点,这应该有用。
[Serializable]
public class Page:AbstractElementModel
{
[XmlArrayItem()]
public Group[] Group;
[XmlArrayItem()]
public Text[] Text;
}