Quiero deserializar enumeraciones a su representación de cadena y viceversa con json.net. La única forma en que pude averiguar para decirle al marco que aplique su StringEnumConverteres anotar las propiedades en cuestión de esta manera:
[JsonConverter(typeof(StringEnumConverter))]
public virtual MyEnums MyEnum { get; set; }
Sin embargo, en mi caso de uso, sería mucho más conveniente configurar json.net globalmente de modo que todas las enumeraciones se (des) serialicen usando el StringEnumConverter, sin la necesidad de anotaciones adicionales.
¿Hay alguna forma de hacerlo, por ejemplo, con la ayuda de la costumbre JsonSerializerSettings?

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettingspero no funcionó. ¿Alguna idea de por qué podría ser eso?Las otras respuestas funcionan para ASP.NET, pero si desea establecer estas configuraciones generalmente para llamar a JsonConvert en cualquier contexto, 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 )
fuente
JsonConvert.DefaultSettings = () => new JsonSerializerSettings { Converters = { new StringEnumConverter { CamelCaseText = true } } };En su Global.asax.cs agregue
HttpConfiguration config = GlobalConfiguration.Configuration; config.Formatters.JsonFormatter.SerializerSettings.Converters.Add (new Newtonsoft.Json.Converters.StringEnumConverter());fuente
Para ASP.NET Core 2, haga lo siguiente:
public void ConfigureServices(IServiceCollection services) { services.AddMvc() .AddJsonOptions(options => { options.SerializerSettings.Converters.Add(new StringEnumConverter()); }); ...Tenga en cuenta que esto no es así
services.AddJsonOptions(...), debe estar etiquetado en MVC porque está creando configuraciones para MVC.fuente
Las respuestas anteriores están desactualizadas a partir de la Versión 12.0.1. La nueva forma es utilizar NamingStrategy. https://www.newtonsoft.com/json/help/html/NamingStrategyCamelCase.htm
serializerSettings.Converters.Add( new StringEnumConverter { NamingStrategy = new CamelCaseNamingStrategy() } );fuente