C# Xml序列化:Can';t在父元素和子元素中定义相同的命名空间

C# Xml序列化:Can';t在父元素和子元素中定义相同的命名空间,c#,.net,xml,serialization,C#,.net,Xml,Serialization,我需要创建类似以下内容的xml结构: <?xml version="1.0" encoding="utf-8"?> <ns0:RootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns0="http://fuu.gub"> <ns0:ChildElement xmlns:ns0="ht

我需要创建类似以下内容的xml结构:

<?xml version="1.0" encoding="utf-8"?>
<ns0:RootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns0="http://fuu.gub">
  <ns0:ChildElement xmlns:ns0="http://fuu.gub">
    <ns0:Data>Some-data</ns0:Data>
  </ns0:ChildElement>
</ns0:RootElement>
在这里我发现了这个:

为元素定义命名空间时,所有子元素 相同的前缀与相同的命名空间相关联

名称空间可以在使用它们的元素中声明,也可以在 XML根元素

注意:解析器不使用名称空间URI进行查找 信息

定义命名空间时,不能使用同一前缀再次定义另一个/同一命名空间

我相信您可以使用相同的名称空间和不同的前缀

<?xml version="1.0" encoding="utf-8"?>
<ns0:RootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns0="http://fuu.gub">
  <ns0:ChildElement>
    <ns0:Data>Some-data</ns0:Data>
  </ns0:ChildElement>
</ns0:RootElement>
[XmlRoot("RootElement", Namespace = "http://fuu.gub")]
public class RootElement
{
    [XmlNamespaceDeclarations]
    public XmlSerializerNamespaces XmlNamespaces { get; set; }

    [XmlElement("ChildElement")]
    public ChildElement Child { get; set; }

    public RootElement() {
        XmlNamespaces = new XmlSerializerNamespaces();
        XmlNamespaces.Add("ns0", "http://fuu.gub");

        Child = new ChildElement();
    }

    public void ToXml(string path)
    {
        XmlSerializer x = new System.Xml.Serialization.XmlSerializer(this.GetType());

        TextWriter txtW = new StreamWriter(path);
        x.Serialize(txtW, this);
    }
}


[XmlRoot(Namespace = "http://fuu.gub")]
public class ChildElement
{
    [XmlNamespaceDeclarations]
    public XmlSerializerNamespaces XmlNamespaces { get; set; }

    [XmlElement]
    public string Data{ get; set; }

    public ChildElement()
    {
        XmlNamespaces = new XmlSerializerNamespaces();
        XmlNamespaces.Add("ns0", "http://fuu.gub");

        Data = "Some-data";
    }
}