【问题标题】:Why Can't I Deserialize This xml?为什么我不能反序列化这个 xml?
【发布时间】:2012-10-12 21:19:54
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# xml xml-serialization


    【解决方案1】:

    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#

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 非常感谢你们!为我节省了两个传奇的时间!
      猜你喜欢
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多