Проблема десериализации XML (атрибут с пространством имен)

Я пытаюсь десериализовать следующий узел XML (на самом деле RDF) в класс.

<rdf:Description rdf:about="http://d.opencalais.com/genericHasher-1/dae360d4-25f1-34a7-9c70-d5f7e4cfe175">
    <rdf:type rdf:resource="http://s.opencalais.com/1/type/em/e/Country"/>
    <c:name>Egypt</c:name>
</rdf:Description>


    [Serializable]
    [XmlRoot(Namespace = "http://www.w3.org/1999/02/22-rdf-syntax-ns#", ElementName = "Description")]
    public class BasicEntity
    {
        [XmlElement(Namespace = "http://s.opencalais.com/1/pred/", ElementName = "name")]
        public string Name { get; set; }
        [XmlAttribute("about", Namespace = "http://www.w3.org/1999/02/22-rdf-syntax-ns#")]
        public string Uri { get; set; }
    }

Элемент name анализируется правильно, а атрибут about - нет. Что я делаю неправильно?


person Johnny    schedule 08.03.2010    source источник
comment
Я ничего не знаю об этой области, но кажется странным, что у вас есть rdf: about = d.opencalais.com/genericHasher-1/ в XML, но XmlAttribute (about, Namespace = w3.org/1999/02/22-rdf-syntax-ns#)] в классе. Это точно правильно?   -  person Martin Smith    schedule 08.03.2010
comment
Ага. Содержимое атрибута rdf: about - это то, что я хочу, а пространство имен такое, как оно отображается в коде.   -  person Johnny    schedule 08.03.2010


Ответы (1)


Вам необходимо указать, что атрибут будет квалифицирован по пространству имен.

[Serializable]
[XmlRoot(Namespace = "http://www.w3.org/1999/02/22-rdf-syntax-ns#", ElementName = "Description")]
public class BasicEntity
{
    [XmlElement(Namespace = "http://s.opencalais.com/1/pred/", ElementName = "name")]
    public string Name { get; set; }

    [XmlAttribute("about", Form=XmlSchemaForm.Qualified, Namespace = "http://www.w3.org/1999/02/22-rdf-syntax-ns#")]
    public string Uri { get; set; }
}
person Lachlan Roche    schedule 08.03.2010
comment
Сработало как шарм, спасибо. Но это должно быть: [XmlAttribute (about, Namespace = w3.org / 1999/02/22-rdf-syntax-ns #, Form = XmlSchemaForm.Qualified)] общедоступная строка Uri {get; установленный; } - person Johnny; 08.03.2010