0

我有一个具有这种结构的文档:

<page name="some-name">
    <header>
        //some content
    </header>
    <section header="value">
        //some content
    </section>
</page>

当我反序列化此文档以获取 Page 类的实例时,我总是遇到反射错误和 InvalidOperationException。我通过调试和大量尝试和错误发现这个错误的原因是我有一个节点(XMLElement)和一个属性(XMLAttribute)的相同名称,在这个例子中名称是“header”。XML 结构不能以任何方式改变,所以这不是解决方案。有没有办法让它工作,或者我必须稍后在反序列化之外添加属性值?

类是这种形式:

[XmlType("page")]
public class Page
{
    [XmlAttribute("name")]
    public string Name { get; set }

    [XmlElement("header")]
    public Header Header { get; set }

    [XmlElement("section")]
    public Section Section { get; set }
}

[XmlType("section")]
public class Section
{
    [XmlAttribute("header")]
    public string Header { get; set }
}

[XmlType("header")]
public class Header
{
    //elements and attributes as properties
}
4

2 回答 2

1

用于[XmlRoot("page")]指定生成的 xml 根元素的名称,而不是使用[XmlType("page")]

https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlrootattribute(v=vs.110).aspx

于 2015-09-09T15:48:18.713 回答
0

您可以尝试使用Xsd.exe从 XML 生成类,看看它是如何解决这个问题的。 是有关从 XML 生成类的更多信息。

于 2013-10-15T13:16:01.307 回答