首页 > 解决方案 > 如何指定子元素在全局名称空间中?

问题描述

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

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

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

我了解空白名称空间将元素放在全局名称空间中。可能不是预期的,但我收到的却是。

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

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

但是,保持 XML 不变并添加以下属性不起作用。

[XmlElement(Namespace="")]

如何指定元素具有用于反序列化的空白命名空间?

标签: c#xml

解决方案


对于有问题的 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; }
}

推荐阅读