6

is there a simple way to remove the namespace from the XML root element. I have tried with

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

on the serializable class. But no use. still getting the same result.

sample class

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

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

    public BINDRequestBody BIND { get; set; }

}

result 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>

i don't understand then whats the use of specifying namsespace in XmlRootAttribute??

Michael Pakhantsov
  • 24,855
  • 6
  • 60
  • 59
RameshVel
  • 64,778
  • 30
  • 169
  • 213
  • The need for a namespace is so you can have two classes with the same Name, and differentiate between them. Also if you link in external classes, they could conflict with your own, so you should differentiate. If you link in a Profile object from two sources, they need to be different when you program against them. – Mikael Svenson Sep 13 '10 at 09:21
  • @Mikael, i understand that... but if i specify namespace as empty, then it should not include it.. right?? – RameshVel Sep 13 '10 at 09:26
  • and Daring showed you how. I was just stating why a namespace is useful, and imo you should always have one. – Mikael Svenson Sep 13 '10 at 11:10

1 Answers1

18

Try this:

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);
        }
    }
}
Darin Dimitrov
  • 1,023,142
  • 271
  • 3,287
  • 2,928