Poulad
Poulad

Reputation: 1321

Snake Cased names for enum values

Is there any built in functionality in Newtonsoft.Json for serializing enum values into their snake-cased names?

currently, I am providing values manually:

[JsonConverter(typeof(StringEnumConverter))]
enum MyEnum {
    [EnumMember(Value = "value_one")]
    ValueOne,
}

Upvotes: 7

Views: 6763

Answers (1)

dbc
dbc

Reputation: 116991

Optional snake-casing of enum values has been implemented in Json.NET 12.0.1. It is now possible to specify a NamingStrategy for StringEnumConverter:

New feature - Added support for NamingStrategy to StringEnumConverter

Thus you can pass SnakeCaseNamingStrategy into any of several of the constructors for StringEnumConverter, e.g. new StringEnumConverter(typeof(SnakeCaseNamingStrategy)).

Using this, you can now specify that enums should be snake-cased globally when serialized by adding an appropriate converter to 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

Or, alternatively, SnakeCaseNamingStrategy can be applied to select enums as follows:

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

For further information see Issue #1862: [Feature] StringEnumConverter takes a NamingStrategy argument.

Upvotes: 13

Related Questions