54 votos

Cómo decirle a Json.Net a nivel mundial para aplicar el StringEnumConverter a todas las enumeraciones

Quiero deserializar enumeraciones para su representación de cadena y viceversa, con json.net. La única manera de que yo pueda averiguar a decir que el marco para aplicar sus StringEnumConverter es anotar las propiedades en cuestión como esta:

[JsonConverter(typeof(StringEnumConverter))]
public virtual MyEnums MyEnum { get; set; }

Sin embargo, en mi caso, sería mucho más conveniente para configurar json.net a nivel mundial de tal manera que todas las enumeraciones de conseguir (de)serializado el uso de la StringEnumConverter, sin la necesidad de extra anotaciones.

Hay alguna forma de hacerlo, por ejemplo, con la ayuda de personalizado, JsonSerializerSettings?

81voto

James Newton-King Puntos 13880

Añadir un StringEnumConverter a la JsonSerializerSettings Convertidores de colección.


Si desea que el serializador de utilizar camelCasing, puede establecer esta así:

SerializerSettings.Converters.Add(
    new StringEnumConverter { CamelCaseText = true });

Esto va a serializar SomeValue "someValue".

23voto

Gaz Puntos 1449

Las otras respuestas trabajo en ASP.NET pero si desea configurar estas opciones de configuración generalmente para llamar JsonConvert en cualquier contexto que usted puede hacer:

JsonConvert.DefaultSettings = (() =>
{
    var settings = new JsonSerializerSettings();
    settings.Converters.Add(new StringEnumConverter {CamelCaseText = true});
    return settings;
});

(Ver http://james.newtonking.com/archive/2013/05/08/json-net-5-0-release-5-defaultsettings-and-extension-data)

13voto

Iggy Puntos 1277

En su Mundial.asax.cs agregar

HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add
                (new Newtonsoft.Json.Converters.StringEnumConverter());

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: