2011-05-29 24 views
25

tengo 4 clases pequeñas para deserializar XML a partir de una encuesta xml incomming, a las clases utilizables para construir el sondeo.cómo deserializar un nodo XML con un valor y un atributo utilizando asp.net serialización

ahora, sé cómo establecer una propiedad de una clase, para que coincida con un determinado atributo o elemento en el xml, y si ese elemento es sólo una cadena que es fácil pero ¿y si el elemento también tiene un atributo como en el siguiente ejemplo?

<Questions> 
<Question id="a guid"> 
    <AnswerItems> 
    <AnswerItem Id="a guid">3</AnswerItem> 
    <AnswerItem Id="a guid">2</AnswerItem> 
    <AnswerItem Id="a guid">5</AnswerItem> 
    </AnswerItems> 
</Question> 
</Questions> 

clase la pregunta sería así:

[Serializable()] 
public class Question 
{ 
    [XmlAttribute("Id")] 
    public Guid QuestionId { get; set; } 

    [XmlArray("AnswerItems")] 
    [XmlArrayItem("AnswerItem", typeof(AnswerItem))] 
    public AnswerItem[] AnswerItems { get; set; } 
} 

[Serializable()] 
public class AnswerItem 
{ 
    [XmlAttribute("Id")] 
    public Guid QuestionId { get; set; } 

    // how do i fetch the value of this node? 
    // its not a XmlElement and it's not an XmlValue 
} 

Ok, por lo que el valor de un nodo AnswerItem, que es lo que quiero conseguir también. que fácilmente podría no utilizar la clase AnswerItem, y sólo tiene que utilizar un AnswerItems XmlArray de tipo String y poner los valores de la matriz, pero entonces perdería del AnswerItem atributo id.

Respuesta

57

En AnswerItem, haga una propiedad llamada Value y márquela con el atributo XmlText. Esta configuración hará que el XmlSerializer para leer el texto en el elemento AnswerItem en la propiedad Value.

[Serializable()] 
public class AnswerItem 
{ 
    [XmlAttribute("Id")] 
    public Guid QuestionId { get; set; } 

    [XmlText] 
    public string Value { get; set; } 
} 
+2

Solo quería publicar eso, he estado buscando una respuesta a una pregunta similar, y esta es la primera que me mostró algo así en toda la pila ... Daría +10 si Podría <3 –

Cuestiones relacionadas