System.Text.Json.EnumExtensions
An extended version from the JsonStringEnumConverter which supports attributes like EnumMember, Display and Description
Install / Use
/learn @StefH/System.Text.Json.EnumExtensionsREADME
System.Text.Json.Extensions
Some extensions to the JsonStringEnumConverter which supports attributes like EnumMember, Display and Description
Info
| | |
|-|-|
| Build Azure | |
| NuGet |
| MyGet (preview) |
|
Installing
You can install from NuGet using the following command in the package manager window:
Install-Package EnumExtensions.System.Text.Json
Or via the Visual Studio NuGet package manager.
If you use the dotnet command:
dotnet add package EnumExtensions.System.Text.Json
Option 1: Usage Example - EnumMember
Define Enum and add attributes
Define an Enum and annotate the Enum fields with the EnumMemberAttribute:
enum WeatherType
{
[EnumMember(Value = "Zonnig")]
Sunny,
[EnumMember(Value = "Helder")]
Clear
}
Add Converter
Add the new JsonStringEnumConverterWithAttributeSupport to the Converters via the JsonSerializerOptions:
var options = new JsonSerializerOptions();
options.Converters.Add(new JsonStringEnumConverterWithAttributeSupport());
Serialize an object
var weatherForecast = new WeatherForecast
{
WeatherType = WeatherType.Sunny
};
var weatherForecastSerialized = JsonSerializer.Serialize(weatherForecast, options);
Console.WriteLine(weatherForecastSerialized); // {"WeatherType":"Zonnig"}
Deserialize an object
Deserialize works by using the same options:
var json = "{\"WeatherType\":\"Zonnig\"}";
var weatherForecastDeserialized = JsonSerializer.Deserialize<WeatherForecast>(json, options);
Option 2: Usage Example - EnumMember
It's also possible to annotate the Enum with a [JsonConverter] so that you don't need to manually registerd the JsonStringEnumConverterWithAttributeSupport to the Converters via the JsonSerializerOptions.
Define Enum and add attributes
Define an Enum
- add the
[JsonConverter(typeof(JsonStringEnumConverterWithAttributeSupport))]to the Enum - annotate the Enum fields with the EnumMemberAttribute:
[JsonConverter(typeof(JsonStringEnumConverterWithAttributeSupport))]
enum WeatherType
{
[EnumMember(Value = "Zonnig")]
Sunny,
[EnumMember(Value = "Helder")]
Clear
}
Generic Attribute is also supported:
[JsonConverter(typeof(JsonStringEnumConverterWithAttributeSupport<WeatherType>))]
enum WeatherType
{
[EnumMember(Value = "Zonnig")]
Sunny,
[EnumMember(Value = "Helder")]
Clear
}
Serializing and Deserialize an object
This works the same as using Option 1.
Note that only Enum values which are annotated with EnumMember are supported.
Usage Example - Display and Description
It's also possible to annotate Enum fields with these attributes:
Define Enum and add attributes
enum WeatherType
{
[EnumMember(Value = "Zonnig")]
Sunny,
[Display(Name = "Helder")]
Clear,
[Description("Bewolkt")]
Cloudy
}
Add Converter
! By default, the Display and Description are disabled, use the following line to enable these.
var options = new JsonSerializerOptions();
options.Converters.Add(new JsonStringEnumConverterWithAttributeSupport(null, true, true, true, true));
Serializing and Deserializing works the same.
Sponsors
Entity Framework Extensions and Dapper Plus are major sponsors and proud to contribute to the development of System.Text.Json.Extensions.
Related Skills
openhue
344.1kControl Philips Hue lights and scenes via the OpenHue CLI.
sag
344.1kElevenLabs text-to-speech with mac-style say UX.
weather
344.1kGet current weather and forecasts via wttr.in or Open-Meteo
tweakcc
1.5kCustomize Claude Code's system prompts, create custom toolsets, input pattern highlighters, themes/thinking verbs/spinners, customize input box & user message styling, support AGENTS.md, unlock private/unreleased features, and much more. Supports both native/npm installs on all platforms.


