.net 如何告诉JsonNet全局地将StringEnumConverter应用于所有枚举

ecfdbz9o  于 2023-05-02  发布在  .NET
关注(0)|答案(6)|浏览(383)

我想用json反序列化枚举到它们的字符串表示,反之亦然。我能想到的告诉框架应用它的StringEnumConverter的唯一方法是像这样注解有问题的属性:

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

然而,在我的用例中,配置www.example会方便得多 www.example.com 全局化,这样所有枚举都可以使用StringEnumConverter进行(解)序列化,而不需要额外的注解。
有没有办法做到这一点,E。例如,在自定义JsonSerializerSettings的帮助下?

pbgvytdp

pbgvytdp1#

StringEnumConverter添加到JsonSerializerSettings Converters集合。
文件:Serialize with JsonConverters
如果你想让序列化器使用camelCasing,你也可以设置这个:

SerializerSettings.Converters.Add(
    new StringEnumConverter { CamelCaseText = true });

这将把SomeValue序列化为someValue

fkaflof6

fkaflof62#

其他答案适用于ASP。NET,但是如果你想设置这些设置,以便在任何上下文中调用JsonConvert,你可以这样做:

JsonConvert.DefaultSettings = (() =>
{
    var settings = new JsonSerializerSettings();
    settings.Converters.Add(new StringEnumConverter {CamelCaseText = true});
    return settings;
});

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

k2arahey

k2arahey3#

在您的全球。asax.cs添加

HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add
                (new Newtonsoft.Json.Converters.StringEnumConverter());
dphi5xsq

dphi5xsq4#

对于ASP.NET Core 2,请执行以下操作:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
                .AddJsonOptions(options =>
                {
                    options.SerializerSettings.Converters.Add(new StringEnumConverter());
                });

        ...

请注意,这不是services.AddJsonOptions(...),它必须标记到MVC上,因为您正在为MVC创建设置。

jm2pwxwz

jm2pwxwz5#

以前的答案在版本12中已经过时。0.1.新的方法是使用NamingStrategy。https://www.newtonsoft.com/json/help/html/NamingStrategyCamelCase.htm

serializerSettings.Converters.Add(
    new StringEnumConverter { NamingStrategy = new CamelCaseNamingStrategy() }
);
7y4bm7vi

7y4bm7vi6#

安装 * 旋转扣。AspNetCore.Newtonsoft* 包。

services.AddControllers().AddNewtonsoftJson(o =>
        {
            o.SerializerSettings.Converters.Add(new StringEnumConverter
            {
                //CamelCaseText = true,//absolete
                NamingStrategy = new CamelCaseNamingStrategy()
            });
        });
 services.AddSwaggerGenNewtonsoftSupport();

相关问题