枚举值的 Snake Cased 名称

Pou*_*lad 5 c# json.net

是否有任何内置功能Newtonsoft.Json可以将枚举值序列化为蛇形名称?

目前,我手动提供值:

[JsonConverter(typeof(StringEnumConverter))]
enum MyEnum {
    [EnumMember(Value = "value_one")]
    ValueOne,
}
Run Code Online (Sandbox Code Playgroud)

dbc*_*dbc 11

Json.NET 12.0.1 中已实现枚举值的可选蛇形外壳。现在可以指定一个NamingStrategyfor StringEnumConverter

新功能 - 为 StringEnumConverter 添加了对 NamingStrategy 的支持

所以你可以传递SnakeCaseNamingStrategy到任何的几个的构造StringEnumConverter,例如new StringEnumConverter(typeof(SnakeCaseNamingStrategy))

使用此功能,您现在可以通过向 中添加适当的转换器来指定在序列化时应全局对枚举进行蛇形大小写JsonSerializerSettings.Converters

var settings = new JsonSerializerSettings
{
    Converters = { new StringEnumConverter(typeof(SnakeCaseNamingStrategy)) },
};
var json = JsonConvert.SerializeObject(MyEnum.ValueOne, settings);

Assert.IsTrue(json == "\"value_one\""); // Passes successfully
Run Code Online (Sandbox Code Playgroud)

或者,SnakeCaseNamingStrategy也可以应用于选择枚举,如下所示:

[JsonConverter(typeof(StringEnumConverter), typeof(SnakeCaseNamingStrategy))]
enum MyEnum
{
    ValueOne,
    // Other values...
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅问题 #1862:[Feature] StringEnumConverter 采用 NamingStrategy 参数