XmlSerializer: sérialisation d'une propriété de classe comme un attribut d'un sous-élément

Je suis en utilisant un XmlSerializer. Ma classe:

[Serializable]
[XmlRoot(ElementName="MyClass")]
public class MyClass
{
    public string Value;
}

Je tiens à sérialiser en sorte que Value se termine comme un attribut d'un sous-élément nommé (par exemple) "Texte".

Résultat escompté:

<MyClass>
    <Text Value="3"/>
</MyClass>

Mais PAS (ce qui serait l'effet de marquage de la Valeur comme une XmlAttribute)

<MyClass Value="3">
</MyClass>

Et PAS (ce qui serait l'effet de marquage de la Valeur comme une XmlElement):

<MyClass>
    <Value>3</Value>
</MyClass>

Comment puis-je y parvenir?

Je suis conscient que je pouvais changer le type de Value de chaîne à l'autre serializable classe personnalisée.

Malheureusement, j'ai beaucoup de ces propriétés, donc j'aurais besoin de créer des dizaines de petites classes.

Est-il une solution plus rapide?


EDIT:

En réponse à vos commentaires:

  • Non, pas tous les biens doit être sérialisé à un sous-élément nommé "Texte". Sous-élément du nom est unique et non ambiguë.
  • Exemple de sortie XML:
    <visibility>
        <site visible="yes"/>
        <comparator visible="no"/>
        <expiration days="7"/>
        <comment>blahblahblah</comment>
    <visibility>
  • Classe exemple:

!

[XmlRoot(ElementName="Visibility")]
public class Visibility
{
    [XPath("/site@visible")] //if only this was possible!
    public string OnSite
    {
        get { return SiteVisible ? "yes" : "no"; }
    }

    [XPath("/comparator@visible")] //as above...
    public string InComparator
    {
        get { return ComparatorVisible ? "yes" : "no"; }
    }

    [XmlIgnore]
    public bool SiteVisible;
    [XmlIgnore]
    public bool ComparatorVisible;

    [XPath("/expiration@days")] //as above...
    public int ExpiresAfterDays; 

    [XmlElement("comment")] //this is easy
    public string Comment;
}
Pourriez-vous fournir la pleine souhaité structure XML (3 à 5 éléments/attributs) avec une bonne classe?
J'ai une solution pour cela - mais pas si chaque propriété a besoin de sérialiser un élément nommé "Texte" - de sorte que vous aurez besoin de donner d'autres exemples, comme par Kirill de la demande. Le problème avec le fait d'avoir plus d'un "Texte", c'est qu'il serait impossible de désérialiser dans la direction inverse le processus ne serait pas en mesure de déterminer la propriété de chaque "Texte" cartes à. Pouvez-vous donner plus, de sorte que nous pouvons vous aider.
en aparté, je crois que tu voulais dire [XmlIgnore] au lieu de [NonSerialized].
Oh que c'est bon. NonSerialized est pour la sérialisation binaire.
La fonctionnalité que vous recherchez n'existe pas. Mordre la balle et écrire une centaine de peu de classes. Il est fait en une seule fois.

OriginalL'auteur Konrad Morawski | 2012-02-06