3

我有一个来自外部来源的 XML 文档。

<?xml version="1.0" encoding="utf-8"?>
<ns0:Info xmlns:ns0="http://www.ZomboCorp.com/">
  <Name>Anthony</Name>
  <Job>Developer</Job>
</ns0:Info>

我需要将它反序列化为这样的对象。

public class Info
{
    public String Name { get; set; }
    public String Job { get; set; }
}

按原样使用,Serializer抛出一个InvalidOperationException

<Info xmlns='http://www.ZomboCorp.com/'>没想到。

如果我添加[XmlElement(Namespace = "http://www.ZomboCorp.com/")]到类定义中,则Serializer返回一个Info具有空属性的新对象。

4

2 回答 2

8

您还必须将 XmlElement 属性添加到每个属性,将 Namespace 属性设置为空字符串(因为在您的情况下不会继承命名空间)。

您对 Info 的定义应如下所示:

XmlRoot(Namespace = "http://www.ZomboCorp.com/")]
public class Info
{
    [XmlElement(Namespace = "")]
    public String Name { get; set; }
    [XmlElement(Namespace = "")]
    public String Job { get; set; }
}

然后它将正确反序列化。

于 2009-01-21T17:02:00.927 回答
5

我使用了xsd.exe(一个 VS 工具)并从 XML 文件生成了一个模式,然后从该模式生成了一个类文件。它建议

[XmlType(AnonymousType = true, Namespace = "http://www.ZomboCorp.com/")]
[XmlRoot(Namespace = "http://www.ZomboCorp.com/", IsNullable = false)]
public class Info
{
    [XmlElement(Form = XmlSchemaForm.Unqualified)]
    public String Name { get; set; }
    [XmlElement(Form = XmlSchemaForm.Unqualified)]
    public String Job { get; set; }
}

但是,我能够逃脱

[XmlType(AnonymousType = true)]
[XmlRoot(Namespace = "http://www.ZomboCorp.com/")]
public class Info
{
    [XmlElement(Form = XmlSchemaForm.Unqualified)]
    public String Name { get; set; }
    [XmlElement(Form = XmlSchemaForm.Unqualified)]
    public String Job { get; set; }
}
于 2009-01-21T21:06:33.727 回答