2010-08-19 3 views
19

J'espère que cela devrait être une réponse facile pour quelqu'un (et peut-être un dupe), mais je n'arrive pas à le comprendre.Utilisation de XmlSerializer pour créer un élément avec des attributs et une valeur mais pas de sous-élément

J'ai besoin de sortir un élément qui ressemble à ceci:

<Quantity foo="AB" bar="CD">37</Quantity> 

Je sais comment obtenir ceci:

<Quantity foo="AB" bar="CD"> 
    <qty>37</qty> 
    </Quantity> 

avec une classe Quantité contenant

public int qty;  
[XmlAttribute] 
public string foo; 

[XmlAttribute] 
public string bar; 

mais bien sûr, quelle que soit la variable, j'insère la quantité dans devient son propre sous-élément.

D'autre part, si je fais la quantité variable dans l'élément parent, je peux définir la valeur et obtenir

<Quantity>37</Quantity> 

mais je ne sais pas comment obtenir les attributs.

Je serais très surpris s'il n'y avait pas un moyen simple de faire cela avec XmlSerializer, mais je ne le sais pas encore. Des idées?

+0

double possible de [XMLSerializer - Élément-attribut de contrôle Jumelage (révisé)] (http://stackoverflow.com/questions/732314/xmlserializer-control-element-attribute-pairing-revised) –

Répondre

47

Je trouve la réponse ici: Xmlserializer - Control Element-Attribute Pairing (revised).

Voici comment procéder: marquer la propriété value avec l'attribut [XmlText].

public class Quantity { 
    // your attributes 
    [XmlAttribute] 
    public string foo; 

    [XmlAttribute] 
    public string bar; 

    // and the element value (without a child element) 
    [XmlText] 
    public int qty; 

} 
+0

+1 pour un titre qui correspondait à ma recherche :) –

+0

vous avez répondu à votre propre question ainsi que la mienne. – Brandin

+0

Il est dommage que l'explication de XmlText ne contienne aucune information sur le fait qu'elle convient aux valeurs non textuelles. – user3791372

Questions connexes