Question

  

Double possible:
   Comment sérialiser une valeur enum sous la forme d'un entier?

Bonjour tout le monde!

Je me demande s'il existe un moyen de forcer la sérialisation d'une valeur enum dans sa valeur entière, au lieu de sa représentation sous forme de chaîne.

Pour vous mettre en contexte: Nous utilisons, dans une application Web qui s'appuie fortement sur les services Web, une seule classe de base pour tous nos en-têtes de demande, indépendamment du type de demande.

Je souhaite ajouter un champ de résultat à l'en-tête afin que nous disposions d'un emplacement où renvoyer des indications à l'application appelante pour indiquer le déroulement de l'opération du côté du service Web. Nous avons déjà une enumération déclarée à cet effet, mais comme nous disposons d'anciennes applications qui font appel à ces services Web qui risquent de ne pas être au courant de ces énumérations, j'aimerais envoyer en série ces valeurs sous forme d'entiers.

Nous avons déjà dû réduire la longueur de ces en-têtes en utilisant le [XmlElement (ElementName = "string representationOfAttributeName")] car nous avons parfois dépassé la longueur maximale de l'URL dans IE, et je me suis demandé s'il existait un attribut similaire à forcer la sérialisation des valeurs enum en entiers.

Quelqu'un a-t-il déjà entendu parler d'un tel attribut?

Comme toujours, merci pour l'aide, Pascal

Était-ce utile?

La solution

Les enums sont sérialisés en ints. Mais généralement, si vous n'aimez pas la façon dont l'une de vos propriétés est sérialisée au format XML, vous pouvez simplement le faire:

[XmlIgnore]
public MyThing MyThing { get; set; }

[XmlElement("MyThing")]
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
public string MyThingForSerialization
{
    get { return //convert MyThing to string; }
    set { MyThing = //convert string to MyThing; }
}

Autres conseils

Les énumérations ne sont PAS sérialisées aussi int par défaut. J'utilise XMLSerializer pour sérialiser une classe et j'ai le même problème que décrit.

(L'exemple de Matt Howells semble fonctionner si vous modifiez la portée de MyThingForSerialization en public, mais j'aimerais voir une meilleure implémentation car cela crée une propriété publique supplémentaire.)

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