如何从XML根元素中删除命名空间?

6

有没有简单的方法可以从XML根元素中删除命名空间。我已经尝试过:

[XmlRootAttribute("MCP", Namespace = "", IsNullable = false)]    

尝试在可序列化类上进行操作。但是没有用,仍然得到相同的结果。

示例类

[Serializable]
[XmlRootAttribute("MCP", Namespace = "", IsNullable = false)]    
public class BINDRequest
{
    public BINDRequest()
    {

    }
    [XmlAttribute]
    public string CLIENT_REQUEST_ID { get; set; }

    public BINDRequestBody BIND { get; set; }

}

结果XML

<?xml version="1.0" encoding="utf-8"?>
<MCP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" CLIENT_REQUEST_ID="1">
  <BIND CLIENT_ID="test" PASSWORD="test" />
</MCP>

那么在XmlRootAttribute中指定命名空间有什么用呢?我不太理解。


命名空间的需要在于可以拥有两个同名的类,并且能够区分它们。此外,如果链接外部类时,可能会与自己的类发生冲突,所以需要进行区分。如果从两个源链接一个配置文件对象,则在对其进行编程时需要使它们不同。 - Mikael Svenson
@Mikael,我理解...但是如果我将命名空间指定为空,它就不应该包括在内,对吗? - RameshVel
而 Daring 给你展示了如何做到这一点。我只是在阐述为什么命名空间很有用,而且在我看来,你应该总是有一个。 - Mikael Svenson
1个回答

18

试试这个:

public class BINDRequest
{
    [XmlAttribute]
    public string CLIENT_REQUEST_ID { get; set; }
}

class Program
{
    static void Main()
    {
        var request = new BINDRequest
        {
            CLIENT_REQUEST_ID = "123"
        };
        var serializer = new XmlSerializer(request.GetType());
        var xmlnsEmpty = new XmlSerializerNamespaces();
        xmlnsEmpty.Add("", "");
        using (var writer = XmlWriter.Create("result.xml"))
        {
            serializer.Serialize(writer, request, xmlnsEmpty);
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接