Is it possible to serialize an enum dictionary key as a number? Example:
public enum MyEnum
{
One = 1,
Two = 2
}
JsonSerializer.Serialize(new Dictionary<MyEnum, int>
{
[MyEnum.One] = 1,
[MyEnum.Two] = 2
});
Output:
{"1":1,"2":2}
Is it possible to serialize an enum dictionary key as a number? Example:
public enum MyEnum
{
One = 1,
Two = 2
}
JsonSerializer.Serialize(new Dictionary<MyEnum, int>
{
[MyEnum.One] = 1,
[MyEnum.Two] = 2
});
Output:
{"1":1,"2":2}
You can write your custom converter which will support writing dictionary keys:
class JsonEnumNumberConverter : JsonConverter<MyEnum>
{
public override MyEnum Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => throw new NotImplementedException();
public override void Write(Utf8JsonWriter writer, MyEnum value, JsonSerializerOptions options) => throw new NotImplementedException();
public override void WriteAsPropertyName(Utf8JsonWriter writer, MyEnum value, JsonSerializerOptions options) =>
writer.WritePropertyName(value.ToString("D"));
}
And example usage (or pass in settings for Serialize
method):
[JsonConverter(typeof(JsonEnumNumberConverter))]
public enum MyEnum
{
One = 1,
Two = 2
}
Or use JsonStringEnumMemberConverter
from Macross.Json.Extensions
which scans for EnumMemberAttribute
:
[JsonConverter(typeof(System.Text.Json.Serialization.JsonStringEnumMemberConverter))]
public enum MyEnum
{
[EnumMember(Value = "1")]
One,
[EnumMember(Value = "2")]
Two
}