Подтвердить что ты не робот

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

У меня есть следующий 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 для класса для поддержки описанного сценария?

4b9b3361

Ответ 1

Вам нужно будет указать, какие пространства имен требуется для каждого поля, используя пространство имен атрибута 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");
    }
}