0

我目前正在尝试以以下格式反序列化一些 XML:

<content:encoded>![CDATA[...

我有一个具有如下属性的对象:

[XmlElementAttribute("content")]
public string Content { get; set; }

然而,尽管 XML 始终具有值,但代码中的属性始终是null?

4

2 回答 2

3

content是命名空间 -encoded是元素名称。所以你XmlElementAttribute应该是:

[XmlElement(Name="encoded", Namespace="<whatever namespace 'content' refers to in your XML>")]
public string Content { get; set; }
于 2012-10-12T21:28:18.903 回答
3

content在您的示例中是一个命名空间。您的元素名称实际上是encoded这样的,因此您需要使用标记您的属性的属性:

[XmlElement("encoded", Namespace => "custom-content-namespace")]
public string Content { get; set; }

请注意,您需要在包含的 XML 中声明命名空间:

<content:encoded xmlns:content="custom-content-namespace">![CDATA[...

这也意味着任何子节点都将以相同的命名空间作为前缀。对于内容来说并不是什么问题CDATA,但以防万一您有其他要反序列化的元素。

For a related questions to this, see Deserializing child nodes outside of parent's namespace using XmlSerializer.Deserialize() in C#

于 2012-10-12T21:28:42.860 回答