Puoi forzare la serializzazione di un valore enum in un numero intero?

Possibile duplicato:
Come serializzo un valore enum come int?

Ciao a tutti!

Mi chiedo se c’è un modo per forzare la serializzazione di un valore enum nel suo valore intero, invece della sua rappresentazione di stringa.

Per metterti in un contesto: stiamo utilizzando, in un’applicazione web che fa molto affidamento sui servizi web, una singola baseclass per tutte le intestazioni delle nostre richieste, indipendentemente dal tipo di richiesta.

Voglio aggiungere un campo Risultato all’intestazione, quindi avremo un posto dove passare i suggerimenti all’app chiamante su come l’operazione è andata sul lato del servizio web. Abbiamo già un enum dichiarato in tal senso, ma dal momento che abbiamo applicazioni legacy che chiamano su quei servizi web che potrebbero non sapere su tali enumerazioni, vorrei inviare serializzare quei valori come numeri interi.

Abbiamo già dovuto ridurre la lunghezza di queste intestazioni utilizzando [XmlElement (ElementName = “stringa representationOfAttributeName”)] perché occasionalmente abbiamo superato la lunghezza massima dell’URL di IE e mi chiedevo se esistessero attributi simili per forzare la serializzazione di enum valori in numeri interi.

Qualcuno ha mai sentito di un tale attributo?

Come sempre, grazie per l’aiuto, Pascal

Le enumerazioni vengono serializzate in ints. Ma generalmente, se non ti piace il modo in cui una delle tue proprietà viene serializzata in XML, puoi semplicemente fare questo:

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

Le enumerazioni NON si serializzano come int come default. Sto usando XMLSerializer per serializzare una class e ho lo stesso problema descritto.

(L’esempio di Matt Howells sembra funzionare se si modifica l’ambito di MyThingForSerialization in pubblico, ma mi piacerebbe vedere una migliore implementazione in quanto ciò crea 1 proprietà pubblica aggiuntiva)