2012-05-19 29 views
19

He siguiente enumeración en mi proyectoEnum serialización JSON vs XML

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

Tengo un objeto que es serializado ya sea a JSON o XML dependiendo de diferentes escenarios y una de propiedad del objeto es de tipo CameraAccessMethod. El problema que tengo es que cuando esta propiedad se serializa en XML dará una representación de cadena de valores enum (Manual, Panasonic, Axis, Aircam) pero en JSON se serializa a valores numéricos (0,1,2,3). ¿Cómo puedo evitar esta incoherencia? también quiero cadenas en serialización JSON.

+1

¿Cómo te va la serialización JSON? Dependiendo del serializador que use, puede o no tener la opción de serializar los valores enum como cadenas. – carlosfigueira

+0

Estoy usando el serializador predeterminado que se envía con asp.net web api beta –

+0

posible duplicado de [serialización JSON de C# enum como cadena] (http://stackoverflow.com/questions/2441290/json-serialization-of-c-sharp -enum-as-string) – HackedByChinese

Respuesta

36

Desde RC Web API puede obtener representaciones de cadena de enumeraciones aplicando una StringEnumConvert a la colección JsonMediaTypeFormatter convertidor existente durante Application_Start():

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

Necesita un solo ';' al final de la línea 1 –

+0

Ahora arreglado, gracias –

0

Para utilizar JsonMediaTypeFormatter y enumConverter ambos podemos usar el siguiente código. // código empieza aquí

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