.net 使用相同的默认名称空间和命名名称空间序列化xml

.net 使用相同的默认名称空间和命名名称空间序列化xml,.net,xml,xml-serialization,xml-namespaces,.net,Xml,Xml Serialization,Xml Namespaces,我知道这看起来不像是最佳实践,但我需要生成具有相同名称空间的xml 例如: <ns1:root xsi:schemaLocation=""http://schemalocation"" xmlns:ns1=""http://schema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schema""> ... </ns1:root> 这就是课堂本身: [XmlRoot(E

我知道这看起来不像是最佳实践,但我需要生成具有相同名称空间的xml

例如:

<ns1:root xsi:schemaLocation=""http://schemalocation""
xmlns:ns1=""http://schema""
xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
xmlns=""http://schema"">
...
</ns1:root>
这就是课堂本身:

[XmlRoot(ElementName = "request", Namespace = "http://schema")]
    [Serializable]
    public class Request 
    {
        [XmlAttributeAttribute("schemaLocation", Namespace = XmlSchema.InstanceNamespace)]
        public string SchemaLocation
        {
            get { return _schemaLocation; }
            set { _schemaLocation = value; }
        }

        ...

        private string _schemaLocation = "http://schemalocation";   }
因此,一切都很好,但默认的xmlns不在生成的xml中。 我也使用过XmlWriterSettings,但没有结果。
有人知道如何在不替换字符串的情况下完成吗?

默认名称空间是根据您用于添加XML片段的名称空间设置的,例如

XNamespace defaultNs = @"http://schema";
var result = new XDocument(new XElement(defaultNs + "root"));
将产生以下输出:

<rootNode xmlns="http://schema">
</rootNode>

谢谢,我同意这是一个解决方案,但我需要使用从属性类到xml的xmlserialization,并且使用一个以上的对象(XDocument)并不好,尤其是当您有大xml时。你知道怎样避开它吗?
<rootNode xmlns="http://schema">
</rootNode>
XNamespace defaultNs = @"http://schema";
var root = new XElement(defaultNs + "root",
    new XAttribute("xsi", "schemaLocation", "http://schemaLocation"),
    new XAttribute(XNamespace.Xmlns + "ns1", defaultNs"),
    new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance")
);