为什么我不能反序列化这个xml?

时间:2012-10-12 21:19:55

标签: c# xml xml-serialization

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

[XmlElement(Name="encoded", Namespace="<whatever namespace 'content' refers to in your XML>")]
public string Content { get; set; }

答案 1 :(得分:3)

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

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

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

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

这也意味着任何子节点都将以相同的命名空间为前缀。问题不在于CDATA内容,而是在您尝试反序列化的其他元素的情况下。

有关此问题,请参阅Deserializing child nodes outside of parent's namespace using XmlSerializer.Deserialize() in C#