Я хочу десериализовать перечисления в их строковое представление и наоборот с помощью json.net. Единственный способ, которым я мог придумать, сказать фреймворку, чтобы применить его, StringEnumConverter
- это аннотировать рассматриваемые свойства следующим образом:
[JsonConverter(typeof(StringEnumConverter))]
public virtual MyEnums MyEnum { get; set; }
Однако в моем случае было бы гораздо удобнее настроить json.net глобально так, чтобы все перечисления получали (де) сериализацию с использованием StringEnumConverter
без необходимости дополнительных аннотаций.
Есть ли способ сделать это например с помощью кастома JsonSerializerSettings
?
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
но не работал. Есть идеи, почему это могло быть?Другие ответы работают для ASP.NET, но если вы хотите установить эти параметры в целом для вызова JsonConvert в любом контексте, вы можете:
JsonConvert.DefaultSettings = (() => { var settings = new JsonSerializerSettings(); settings.Converters.Add(new StringEnumConverter {CamelCaseText = true}); return settings; });
(См. Http://james.newtonking.com/archive/2013/05/08/json-net-5-0-release-5-defaultsettings-and-extension-data )
источник
JsonConvert.DefaultSettings = () => new JsonSerializerSettings { Converters = { new StringEnumConverter { CamelCaseText = true } } };
В вашем Global.asax.cs добавьте
HttpConfiguration config = GlobalConfiguration.Configuration; config.Formatters.JsonFormatter.SerializerSettings.Converters.Add (new Newtonsoft.Json.Converters.StringEnumConverter());
источник
Для ASP.NET Core 2 выполните следующие действия:
public void ConfigureServices(IServiceCollection services) { services.AddMvc() .AddJsonOptions(options => { options.SerializerSettings.Converters.Add(new StringEnumConverter()); }); ...
Обратите внимание, что это не так
services.AddJsonOptions(...)
, его необходимо пометить в MVC, потому что вы создаете настройки для MVC.источник
Предыдущие ответы устарели с версии 12.0.1. Новый способ - использовать NamingStrategy. https://www.newtonsoft.com/json/help/html/NamingStrategyCamelCase.htm
serializerSettings.Converters.Add( new StringEnumConverter { NamingStrategy = new CamelCaseNamingStrategy() } );
источник