1

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}
Guru Stron
  • 102,774
  • 10
  • 95
  • 132
Eugene
  • 87
  • 1
  • 6

1 Answers1

0

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
}
Guru Stron
  • 102,774
  • 10
  • 95
  • 132