Domanda

  

Possibile duplicato:
   Come posso serializzare 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, anziché nella sua rappresentazione di stringa.

Per metterti nel contesto: Stiamo utilizzando, in un'applicazione Web che si basa fortemente sui servizi Web, una singola base di base per tutte le intestazioni delle 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 è andata l'operazione sul lato del servizio web. Abbiamo già un enum dichiarato in tal senso, ma dal momento che abbiamo app legacy che chiamano quei servizi Web che potrebbero non conoscere tali enum, mi piacerebbe inviare serializzare quei valori come numeri interi.

Abbiamo già dovuto ridurre la lunghezza di quelle intestazioni usando il [XmlElement (ElementName = " string rappresentationOfAttributeName ")] perché occasionalmente superavamo la massima lunghezza dell'URL di IE e mi chiedevo se ci fossero attributi simili a impone la serializzazione dei valori enum in numeri interi.

Qualcuno ha mai sentito parlare di un tale attributo?

Come sempre, grazie per l'aiuto, Pascal

È stato utile?

Soluzione

Gli enum si serializzano in in. Ma in generale, se non ti piace il modo in cui una delle tue proprietà viene serializzata in XML, puoi semplicemente farlo:

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

Altri suggerimenti

Gli enumerati NON serializzano come int di default. Sto usando XMLSerializer per serializzare una classe e ho lo stesso problema descritto.

(L'esempio di Matt Howells sembra funzionare se cambi l'ambito di MyThingForSerialization in pubblico, ma vorrei vedere una migliore implementazione perché questo crea 1 proprietà pubblica extra)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top