Как указать атрибуты сериализации XML для поддержки префиксов пространства имен при десериализации в .NET? - PullRequest
26 голосов
/ 10 августа 2009

У меня есть следующий XML:

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

Как определить атрибуты сериализации XML в классе для поддержки описанного сценария?

1 Ответ

56 голосов
/ 11 августа 2009

Вам необходимо указать, какие пространства имен требуется для каждого поля, используя пространство имен атрибута XmlElement . Это позволит вам связать поле с определенным пространством имен, но вам также нужно будет предоставить свойство вашего класса, которое возвращает тип XmlNamespaceDeclarations , чтобы получить сопоставление префикса.

См. Документацию и образец ниже:

 [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");
        }
    }
...