Reputation: 1321
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
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