2010-03-08 2 views
3

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

<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 is not. Что я делаю не так?

+0

Не область, я знаю, что ничего о, но это выглядит странно, что у вас есть RDF: о = "http://d.opencalais.com/genericHasher-1/dae360d4-25f1-34a7-9c70-d5f7e4cfe175 "в XML, но XmlAttribute (" about ", Namespace =" http://www.w3.org/1999/02/22-rdf-syntax-ns# ")] в классе. Это определенно правильно? –

+0

Да. Содержимое атрибута rdf: about - это то, что я хочу, а пространство имен - как показано в коде. – Johnny

ответ

5

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

[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; } 
} 
+0

Работал как шарм, спасибо. Но это должно быть: [XmlAttribute ("about", Namespace = "http://www.w3.org/1999/02/22-rdf-syntax-ns#", Form = XmlSchemaForm.Qualified)] public строка Uri {get; задавать; } – Johnny

Смежные вопросы