用于枚举值的Snake Cased名称

时间:2018-01-04 13:14:14

标签: c# json.net

readme中是否有内置功能可以将枚举值序列化为蛇形名称?

目前,我手动提供价值:

Newtonsoft.Json

1 个答案:

答案 0 :(得分:3)

Json.NET 12.0.1中实现了枚举值的可选蛇形框。现在可以为NamingStrategy指定一个StringEnumConverter

  

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

因此,您可以将SnakeCaseNamingStrategy传递到StringEnumConverter的任何constructors中,例如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

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

[JsonConverter(typeof(StringEnumConverter), typeof(SnakeCaseNamingStrategy))]
enum MyEnum
{
    ValueOne,
    // Other values...
}

有关更多信息,请参见Issue #1862: [Feature] StringEnumConverter takes a NamingStrategy argument