Как сообщить Json.Net глобально применить StringEnumConverter ко всем enumsм

Я хочу десериализовать enums в их строковое представление и наоборот с помощью json.net. Единственный способ, с помощью которого я мог бы рассказать, как применить StringEnumConverter к StringEnumConverter – это аннотирование StringEnumConverter свойств следующим образом:

 [JsonConverter(typeof(StringEnumConverter))] public virtual MyEnums MyEnum { get; set; } 

Однако в моем случае было бы гораздо удобнее настроить json.net во всем мире таким образом, чтобы все enums получали (де) сериализованными с использованием StringEnumConverter без необходимости дополнительных аннотаций.

Есть ли способ сделать это, например, с помощью пользовательских JsonSerializerSettings ?

Добавьте StringEnumConverter в коллекцию JsonSerializerSettings Converters.

Документация: Сериализация с помощью 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; }); 

(См. http://james.newtonking.com/archive/2013/05/08/json-net-5-0-release-5-defaultsettings-and-extension-data )

В вашем приложении 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.

  • Можно ли указать путь в атрибуте для сопоставления свойства в моем classе с дочерним свойством в моем JSON?
  • Уничтожить вложенные JSON в объекты C #
  • Удаление десериализации JSON в .NET-объект с использованием Newtonsoft (или LINQ to JSON, возможно?)
  • Как вернуть объект JSon
  • Как я могу объединить два объекта JObject?
  • Сериализовать контейнер перечислений в виде строк с помощью JSON.net
  • Как я могу десериализовать JSON для простого словаря в ASP.NET?
  • Json.NET Отключить десериализацию в DateTime
  • Как игнорировать неизвестные значения enum во время десериализации json?
  • Игнорирование нулевых полей в Json.net
  • Сериализация нулевого значения в JSON.NET
  • Давайте будем гением компьютера.