Как сказать Json.Net во всем мире применяются StringEnumConverter для всех перечислений



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



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


однако, в моем случае использования, было бы гораздо удобнее настроить json.net глобально так, что все перечисления получают (de)сериализованные с помощью StringEnumConverter, без дополнительного объяснения.



есть ли способ сделать так, например, с помощью custom JsonSerializerSettings?

620   4  

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;
});

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

в вашем глобальном.асакс.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

    Ничего не найдено.