2008-09-22 7 views
2

Possible en double:
How do I serialize an enum value as an int?Pouvez-vous forcer la sérialisation d'une valeur enum dans un entier?

Salut, tous!

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 dans le contexte: Nous utilisons, dans une application web qui dépend fortement des services web, un seul baseclass pour tous nos en-têtes de requête, indépendamment du type de requête.

Je souhaite ajouter un champ de résultat à l'en-tête, afin que nous ayons un endroit pour transmettre des conseils à l'application appelante sur la manière dont l'opération s'est déroulée du côté du service Web. Nous avons déjà une déclaration à cet effet, mais étant donné que nous avons des applications héritées qui font appel à ces services Web qui ne connaissent peut-être pas ces énumérations, j'aimerais envoyer ces valeurs en série sous la 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, et je me suis demandé s'il y avait des attributs similaires à force la sérialisation des valeurs enum en entiers.

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

Comme toujours, merci pour l'aide, Pascal

Répondre

6

énumérations ne serialize ints. Mais en général, si vous ne voulez pas la façon dont l'une de vos propriétés XML obtient sérialisé, vous pouvez simplement faire ceci:

[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; } 
} 
+0

Notez que 'MyThingForSerialization' doit être Publique. XmlSerializer ne regarde pas les champs/propriétés privés. – Miral

+0

@Miral J'ai ajouté les attributs 'EditorBrowsable' et' Browsable' pour contourner cela. – Shimmy

+0

Très bien ... travaillé pour moi aussi pour que je puisse aussi faire fonctionner un interpréteur de conversion puisque le fichier stockait le niveau d'accès bizarre. – RiddlerDev

3

énumérations ne sérialiser comme int par défaut. J'utilise XMLSerializer pour sérialiser une classe et j'ai le même problème que celui décrit.

(L'exemple de Matt Howells semble fonctionner si vous modifiez la portée de MyThingForSerialization au public, mais je voudrais voir une meilleure mise en œuvre cause de cela crée une propriété publique supplémentaire)