我是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的空白类)
我希望能够将组或文本的任何实例推入内容列表。但是,当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结构,使问题更清晰。
如果不想使用包装器元素,请使用XmlElement:
public class Page:AbstractElementModel
{
[XmlElement("Group", typeof(Group))]
[XmlElement("Text", typeof(Text))]
public AbstractElementModel[] content;
}
其他笔记:
- 你不需要
[Serializable]
一般不建议使用 - 公共字段—首选属性 在我看来,列表比数组要好。
考虑到您可能在Page下有多个相同类型的节点,这应该可以工作。
[Serializable]
public class Page:AbstractElementModel
{
[XmlArrayItem()]
public Group[] Group;
[XmlArrayItem()]
public Text[] Text;
}