2009-11-18 14 views
5

Estoy teniendo un problema al intentar deserialise este XML:¿Cómo puedo deserializar un elemento XML en una matriz de elementos con atributos y texto 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> 

Usando el código:

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

Básicamente, tengo que poner el contenido del texto del elemento en Links.Link pero el atributo soy tratando [XmlText] no proporciona el comportamiento que esperaría y me sale el error:

Hubo un error que refleja el campo 'Enlaces'..

¡Si alguien pudiera señalar el error de mi camino, estaría muy agradecido!

Gracias.

Respuesta

5

Tal vez sólo tiene que utilizar string:

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

En el momento de la clase es recursivo (un árbol) - No creo que eso es lo que pretende.

(también cambió a una propiedad, pero ese no es el problema - string es el biggie; pero hay mucha de razones para utilizar propiedades en lugar de campos, y con auto-propiedades (C# 3.0) hay son pocas excusas para no)


Editar: también, intente observar la excepción más interna; en este caso, el mensaje es:

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

que da una indicación razonable de que el problema es ;-P

+0

Doh! Muy bien visto Marc :) – Ryall

+0

También se cambió a propiedades en lugar de campos. Gracias por el consejo. – Ryall

+0

Ignora el -1 ... presioné la flecha hacia abajo por error, no me deja volver a subir ... Lo siento: S – Ryall

0

revisar este artículo XML Serialization in C#. El autor usa un getter/setter para agregar elementos a la colección (matriz en el artículo) y aplica el atributo [XmlElement("link")] al getter/setter.

Saludos.

Cuestiones relacionadas