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 StringEnumConverter
es 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.SerializerSettings
pero 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