inthevortex
inthevortex

Reputation: 334

Serializing class adds prefixes automatically to XML elements

I have the following class that needs to be serialized:

[XmlRoot("Login", Namespace = "http://tempuri.org/Logon"), Serializable()]
    public class Login
    {
        [XmlElement("programCode")]
        public string ProgramCode { get; set; }
        [XmlElement("contactType")]
        public string ContactType { get; set; }
        [XmlElement("email")]
        public string Email { get; set; }
        [XmlElement("password")]
        public string Password { get; set; }
        [XmlElement("projectName")]
        public string ProjectName { get; set; }
}

When I serialize this class, I obtain the following XML:

<q1:Login xmlns:q1="http://tempuri.org/Logon"><q1:programCode>abc</q1:programCode><q1:contactType>P</q1:contactType><q1:email>[email protected]</q1:email><q1:password>abc</q1:password><q1:projectName>abc</q1:projectName></q1:Login>

I do not know where the prefix q1 is getting generated from. I want an XML like this:

<Login xmlns="http://tempuri.org/Logon">
      <programCode>abc</programCode>
      <contactType>P</contactType>
      <email>[email protected]</email>
      <password>abc</password>
      <projectName>abc</projectName>
    </Login>

Can anyone please help me out with this? Thank you.

Update: Serialization code:

public string GetObjectInXML(object obj)
        {
            StringWriter sw = new StringWriter();
            StringBuilder sb = new StringBuilder(_soapEnvelope);
            XmlSerializer serializer = new XmlSerializer(obj.GetType());
            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
            XmlWriterSettings settings = new XmlWriterSettings
            {
                OmitXmlDeclaration = true
            };
            XmlWriter writer = XmlWriter.Create(sw, settings);

            ns.Add(string.Empty, string.Empty);
            serializer.Serialize(writer, obj, ns);
            var str = sw.ToString();

            return str;
        }

For now this is a method which returns string just to check if my XML is built properly.

Upvotes: 1

Views: 1996

Answers (2)

Ray Krungkaew
Ray Krungkaew

Reputation: 6965

Can you remove the name space?

    [XmlRoot("Login", Namespace = ""), Serializable()]
    public class Login { 
        [XmlElement("programCode")]
        public string ProgramCode { get; set; }
        [XmlElement("contactType")]
        public string ContactType { get; set; }
        [XmlElement("email")]
        public string Email { get; set; }
        [XmlElement("password")]
        public string Password { get; set; }
        [XmlElement("projectName")]
        public string ProjectName { get; set; }
    }
    public static string SerializeXml<T>(T value)
    {
        var settings = new XmlWriterSettings();
        settings.OmitXmlDeclaration = true;

        var namespaces = new XmlSerializerNamespaces();
        namespaces.Add("q1", "http://tempuri.org/Logon");

        var xmlserializer = new XmlSerializer(typeof(T));
        var stringWriter = new StringWriter();

        using (var writer = XmlWriter.Create(stringWriter, settings))
        {
            xmlserializer.Serialize(writer, value, namespaces);
            return stringWriter.ToString();
        }
    }
    public static void Main(string[] args)
    {
        var login = new Login();
        login.ContactType = "XMLType";
        login.Email = "[email protected]";

        var a = SerializeXml(login);
        Console.WriteLine(a);
        Console.ReadLine();
    }

Result

<Login xmlns:q1="http://tempuri.org/Logon">
    <contactType>XMLType</contactType>
    <email>[email protected]</email>
</Login>

Upvotes: 0

Alistair Sutherland
Alistair Sutherland

Reputation: 1361

The XMLSerializer supports providing a default namespace e.g.

string defaultNamespace = "http://tempuri.org/Logon";

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add(string.Empty, defaultNamespace);

XmlSerializer xs = new XmlSerializer(typeof(T), defaultNamespace);

Upvotes: 3

Related Questions