2010-03-08 7 views
3

J'essaie de désérialiser le nœud XML suivant (RDF en fait) dans une classe.Problème de désérialisation XML (attribut avec un espace de noms)

<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; } 
    } 

L'élément name est analysé correctement mais l'attribut about ne l'est pas. Qu'est-ce que je fais mal?

+0

Pas une région que je connais rien, mais il semble étrange que vous avez rdf: about = "http://d.opencalais.com/genericHasher-1/dae360d4-25f1-34a7-9c70-d5f7e4cfe175 "dans le XML mais XmlAttribute (" about ", Namespace =" http://www.w3.org/1999/02/22-rdf-syntax-ns# ")] dans la classe. Est-ce vraiment correct? –

+0

Oui. Le contenu de l'attribut rdf: about est ce que je veux et l'espace de noms est tel qu'il apparaît dans le code. – Johnny

Répondre

5

Vous devez spécifier que l'attribut sera qualifié d'espace de nom.

[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

A travaillé comme un charme, merci. Mais il devrait être: [XmlAttribute ("about", Namespace = "http://www.w3.org/1999/02/22-rdf-syntax-ns#", Form = XmlSchemaForm.Qualified)] public chaîne Uri {get; ensemble; } – Johnny