views:

622

answers:

1

I have a following XML:

<person xmlns:a="http://example.com" xmlns:b="http://sample.net"&gt;
    <a:fName>John</a:fName>
    <a:lName>Wayne</a:lName>
    <b:age>37</b:age>
</person>

How do I define XML serialization attributes on a class to support described scenario?

+7  A: 

You'll need to indicate which namespaces each field requires by using Namespace of XmlElement attribute. This will allow you to associate a field with a particular namespace, but you'll also need to expose a property on your class that returns type XmlNamespaceDeclarations in order to get the prefix association.

See documentation and sample below:

 [XmlRoot(ElementName="person")]
    public class Person
    {

        [XmlElement(Namespace="http://example.com")]
        public string fname;

        [XmlElement(Namespace="http://sample.com")]
        public string lname;

        [XmlNamespaceDeclarations]
        public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();

        public Person()
        {
            xmlns.Add("a", "http://example.com");
            xmlns.Add("b", "http://sample.com");
        }
    }
Zach Bonham
That's it, thanks!
Piotr Owsiak
One note for others, seems that the XmlSerializerNamespaces thingy is not required if you only do deserialization, although I would still consider it a good practice anyway.
Piotr Owsiak