2012-05-19 25 views
19

ho seguito Enum nel mio progettoEnum serializzazione JSON vs XML

public enum CameraAccessMethod 
{ 
    Manual = 0, 
    Panasonic = 1, 
    Axis = 2, 
    AirCam = 3 
} 

Ho un oggetto che è serializzato sia per JSON o XML a seconda diversi scenari e una delle proprietà dell'oggetto è di tipo CameraAccessMethod. Il problema è che quando questa proprietà viene serializzata in XML, fornirà una rappresentazione in formato stringa dei valori enum (Manuale, Panasonic, Axis, Aircam) ma in JSON è serializzata su valori numerici (0,1,2,3). Come posso evitare questa incoerenza? Voglio anche le stringhe nella serializzazione JSON.

+1

Come si esegue la serializzazione JSON? A seconda del serializzatore che si usa, può o non può avere la possibilità di serializzare i valori enum come stringhe. – carlosfigueira

+0

Utilizzo il serializzatore predefinito fornito con asp.net web API beta –

+0

possibile duplicato di [serializzazione JSON di C# enum come stringa] (http://stackoverflow.com/questions/2441290/json-serialization-of-c-sharp -enum-as-string) – HackedByChinese

risposta

36

Dal Web API RC si possono ottenere rappresentazioni di stringa di enumerazioni applicando una StringEnumConvert alla collezione JsonMediaTypeFormatter convertitore esistente durante Application_Start():

var jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter; 
var enumConverter = new Newtonsoft.Json.Converters.StringEnumConverter(); 
jsonFormatter.SerializerSettings.Converters.Add(enumConverter); 
+0

Richiede un singolo ';' alla fine della riga 1 –

+0

Ora risolto, grazie –

0

Per utilizzare JsonMediaTypeFormatter e enumConverter entrambi possiamo usare sotto il codice. // codice inizia qui

var serializerSettings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings; 
var enumConverter = new Newtonsoft.Json.Converters.StringEnumConverter(); 
serializerSettings.Converters.Add(enumConverter); 
GlobalConfiguration.Configuration.Formatters.Clear(); 
GlobalConfiguration.Configuration.Formatters.Add(new PartialJsonMediaTypeFormatter() 
{ 
    IgnoreCase = true, 
    SerializerSettings = serializerSettings 
});