Question

La partie 2 du schéma XML spécifie qu'une instance d'un type de données défini comme booléen peut avoir les littéraux légaux suivants {true, false, 1, 0}. Le code XML suivant, par exemple, lors de la désérialisation, définit la propriété booléenne " Emulate " vers true .

<root>
    <emulate>1</emulate>
</root>

Cependant, lorsque je sérialise l'objet en XML, j'obtiens true au lieu de la valeur numérique. Ma question est la suivante: y at-il un moyen de contrôler la représentation booléenne dans le XML?

Était-ce utile?

La solution

Vous pouvez implémenter IXmlSerializable qui vous permettra de modifier la sortie sérialisée de votre classe comme vous le souhaitez. Cela impliquera la création des 3 méthodes GetSchema (), ReadXml (XmlReader r) et WriteXml (XmlWriter r). Lorsque vous implémentez l'interface, ces méthodes sont appelées à la place de .NET qui tente de sérialiser l'objet lui-même.

Vous trouverez des exemples à l'adresse suivante:

http://www.developerfusion.co.uk/show/4639/ et

http://msdn.microsoft.com /en-us/library/system.xml.serialization.ixmlserializable.aspx

Autres conseils

Vous pouvez également le faire en utilisant un attribut XmlSerializer black magic:

[XmlIgnore]
public bool MyValue { get; set; }

/// <summary>Get a value purely for serialization purposes</summary>
[XmlElement("MyValue")]
public string MyValueSerialize
{
    get { return this.MyValue ? "1" : "0"; }
    set { this.MyValue = XmlConvert.ToBoolean(value); }
}

Vous pouvez également utiliser d'autres attributs pour cacher ce membre à intellisense si cela vous choque! Ce n'est pas une solution parfaite, mais cela peut être plus rapide que de mettre en œuvre IXmlSerializable.

Non, vous n'utilisez pas le System.Xml.XmlSerializer par défaut: vous devez changer le type de données en un int pour y parvenir ou passer à autre chose en fournissant votre propre code de sérialisation (possible, mais pas très amusant).

Cependant, vous pouvez simplement post-traiter le XML généré à la place, bien sûr, soit en utilisant XSLT, soit simplement en utilisant une substitution de chaîne. Un peu un bidouillage, mais assez rapide, à la fois en développement et en exécution ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top