如何在全局名称空间中指定子元素?

时间:2018-04-27 13:38:32

标签: c# xml

我收到一些看起来像这样的XML。

<?xml version="1.0"?>
<parent xmlns="urn:place-com:spec.2004">
  <childA xmlns="">123</childA>
  <childB xmlns="">456</childB>
</parent>

我用C#的XmlSerializer将它反序列化为一个类。它工作,除了空白子命名空间给我带来麻烦。它们在类中的属性为null。

我理解空白名称空间将元素放在global namespace中。可能不是什么意图,但我收到的正是如此。

如果我从子元素中手动删除xmlns=""属性,则它可以正常工作。如果我使用xmlns="testNamespace"填写属性并将以下属性添加到类中的属性,则它可以正常工作。

[XmlElement(Namespace="testNamespace")]
public string childA
{ ... }

但是,按原样保留XML,并添加以下属性不起作用。

[XmlElement(Namespace="")]

如何指定元素具有空白名称空间以进行反序列化?

1 个答案:

答案 0 :(得分:1)

对于所讨论的xml,以下类可以很好地工作。

[XmlRoot("parent", Namespace = "urn:place-com:spec.2004", IsNullable = false)]
public class Parent
{
    [XmlElement("childA", Namespace = "")]
    public string ChildA { get; set; }

    [XmlElement("childB", Namespace = "")]
    public string ChildB { get; set; }
}