2009-11-18 2 views
5

J'ai un problème en essayant de deserialise ce XML:Comment désérialiser un élément XML dans un tableau d'éléments avec à la fois des attributs et du texte en C#?

<?xml version="1.0" encoding="UTF-8"?> 
<links> 
    <link title="ABC">http://abc.co.uk</link> 
    <link title="eBay">http://ebay.co.uk</link> 
    <link title="Best Damn Site on the Web">http://stackoverflow.com</link> 
</links> 

En utilisant le code:

[XmlRoot("links")] 
public class LinksInterface 
{ 
    [XmlElement("link")] 
    public List<LinkElement> Links; 

    public class LinkElement 
    { 
     [XmlAttribute("title")] 
     public string Title; 
     [XmlText] // This bit is the troublesome bit! 
     public LinkElement Link; 
    } 
} 

Fondamentalement, je dois mettre le contenu du texte de l'élément en Links.Link mais l'attribut je suis essayant [XmlText] ne fournit pas le comportement que je pense et je reçois l'erreur:

Il y a eu une erreur reflétant « Liens » sur le terrain..

Si quelqu'un pouvait signaler l'erreur de mes manières, je serais très reconnaissant!

Merci.

Répondre

5

Peut-être il suffit d'utiliser string:

[XmlText] 
public string Link {get;set;} 

Au moment où la classe est récursive (un arbre) - Je ne pense pas que ce soit ce que vous vouliez.

(I également commuté à une propriété, mais ce n'est pas le problème - string est le trop grave, mais il y a beaucoup des raisons d'utiliser des propriétés au lieu des champs et des propriétés d'auto-(C# 3.0) il sont quelques excuses pour ne pas)


Editer: aussi, essayez de regarder à l'exception interne; dans ce cas, le message est:

Cannot serialize member 'Link' of type LinksInterface.LinkElement. XmlAttribute/XmlText cannot be used to encode complex types.

Cela donne une indication raisonnable où le problème est ;-P

+0

Doh! Joliment repéré Marc :) – Ryall

+0

Également changé en propriétés au lieu de champs. Merci pour le conseil. – Ryall

+0

Ignorer le -1 ... cliquez sur la flèche vers le bas par erreur, je ne vais pas me laisser le re-up ... Désolé: S – Ryall

0

Vérifiez cet article XML Serialization in C#. L'auteur utilise un getter/setter pour ajouter des éléments à la collection (tableau dans l'article) et appliquer l'attribut [XmlElement("link")] au getter/setter.

Cheers.

Questions connexes