Как сообщить 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.

  • Создайте строго типизированный объект c # из объекта json с ID как имя
  • Удаление десериализации JSON в .NET-объект с использованием Newtonsoft (или LINQ to JSON, возможно?)
  • Сериализация нескольких свойств DateTime в одном classе с использованием разных форматов для каждого из них
  • Регистрация пользовательского JsonConverter по всему миру в Json.Net
  • Как установить Json.Net в качестве сериализатора по умолчанию для службы WCF REST
  • Как я могу объединить два объекта JObject?
  • Как преобразовать массив Json в список объектов в c #
  • Установка стандартного JSON-сериализатора в ASP.NET MVC
  • Разбор большого json-файла в .NET.
  • Json.NET Отключить десериализацию в DateTime
  • Можете ли вы определить, был ли объект, десериализованный объект, отсутствием поля с classом JsonConvert в Json.NET
  • Давайте будем гением компьютера.