Как сказать Json.Net во всем мире применяются StringEnumConverter для всех перечислений
Я хочу десериализовать перечисления в их строковое представление и наоборот с помощью json.net. единственный способ, которым я мог бы выяснить, чтобы сказать рамки, чтобы применить его StringEnumConverter это аннотировать свойства в вопросе, как это:
[JsonConverter(typeof(StringEnumConverter))]
public virtual MyEnums MyEnum { get; set; }
однако, в моем случае использования, было бы гораздо удобнее настроить json.net глобально так, что все перечисления получают (de)сериализованные с помощью StringEnumConverter, без дополнительного объяснения.
есть ли способ сделать так, например, с помощью custom JsonSerializerSettings?
4 ответов:
добавить
StringEnumConverterдоJsonSerializerSettingsколлекция преобразователей.документы: сериализация с помощью JsonConverters
если вы хотите, чтобы сериализатор использовал camelCasing, вы также можете установить это:
SerializerSettings.Converters.Add( new StringEnumConverter { CamelCaseText = true });это будет сериализовать
SomeValueдоsomeValue.
другие ответы работают для ASP.NET, но если вы хотите установить эти параметры вообще для вызова JsonConvert в любом контексте, вы можете сделать:
JsonConvert.DefaultSettings = (() => { var settings = new JsonSerializerSettings(); settings.Converters.Add(new StringEnumConverter {CamelCaseText = true}); return settings; });
в вашем глобальном.асакс.cs add
HttpConfiguration config = GlobalConfiguration.Configuration; config.Formatters.JsonFormatter.SerializerSettings.Converters.Add (new Newtonsoft.Json.Converters.StringEnumConverter());
для ASP.NET ядро 2 Выполните следующие действия:
public void ConfigureServices(IServiceCollection services) { services.AddMvc() .AddJsonOptions(options => { options.SerializerSettings.Converters.Add(new StringEnumConverter()); }); ...обратите внимание, что это не
services.AddJsonOptions(...), он должен быть помечен на MVC, потому что вы создаете настройки для MVC.
Comments