Desejo desserializar as enumerações para sua representação de string e vice-versa com json.net. A única maneira que eu poderia descobrir para dizer ao framework para aplicá-lo StringEnumConverter
é anotar as propriedades em questão assim:
[JsonConverter(typeof(StringEnumConverter))]
public virtual MyEnums MyEnum { get; set; }
No entanto, no meu caso de uso, seria muito mais conveniente configurar o json.net globalmente de forma que todas as enumerações sejam (des) serializadas usando o StringEnumConverter
, sem a necessidade de anotações extras.
Existe alguma maneira de fazer isso, por exemplo, com a ajuda de custom JsonSerializerSettings
?
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
mas não funcionou. Alguma ideia de por que isso poderia ser?As outras respostas funcionam para ASP.NET, mas se você deseja definir essas configurações geralmente para chamar JsonConvert em qualquer contexto, você pode fazer:
JsonConvert.DefaultSettings = (() => { var settings = new JsonSerializerSettings(); settings.Converters.Add(new StringEnumConverter {CamelCaseText = true}); return settings; });
(Consulte http://james.newtonking.com/archive/2013/05/08/json-net-5-0-release-5-defaultsettings-and-extension-data )
fonte
JsonConvert.DefaultSettings = () => new JsonSerializerSettings { Converters = { new StringEnumConverter { CamelCaseText = true } } };
No seu Global.asax.cs adicione
HttpConfiguration config = GlobalConfiguration.Configuration; config.Formatters.JsonFormatter.SerializerSettings.Converters.Add (new Newtonsoft.Json.Converters.StringEnumConverter());
fonte
Para ASP.NET Core 2, faça o seguinte:
public void ConfigureServices(IServiceCollection services) { services.AddMvc() .AddJsonOptions(options => { options.SerializerSettings.Converters.Add(new StringEnumConverter()); }); ...
Observe que não
services.AddJsonOptions(...)
, ele deve ser marcado no MVC porque você está criando configurações para o MVC.fonte
As respostas anteriores estão desatualizadas na versão 12.0.1. A nova maneira é usar NamingStrategy. https://www.newtonsoft.com/json/help/html/NamingStrategyCamelCase.htm
serializerSettings.Converters.Add( new StringEnumConverter { NamingStrategy = new CamelCaseNamingStrategy() } );
fonte