json_serializable.dart icon indicating copy to clipboard operation
json_serializable.dart copied to clipboard

Allow more than one value map to the same enum value with `@JsonValue`

Open mateusfccp opened this issue 2 years ago • 4 comments

Currently, we can use @JsonValue in an enum to define what value maps to it.

enum CustomType {
  @JsonValue('a')
  valueA,
  @JsonValue('b')
  valueB,
  @JsonValue('c')
  valueC,
}

Now, I want to map more than one value to the same enum value. I cannot do this unless I write a custom JsonConverter for the enum.

This issue proposes that we have a way to tell json_serializable that we want more than one value to be mapped to our enum value.

For instance:

enum CustomType {
  @JsonValue('valueA')
  @JsonValue('a')
  valueA,
  @JsonValue('valueB')
  @JsonValue('b')
  valueB,
  @JsonValue('valueC')
  @JsonValue('c')
  valueC,
}

mateusfccp avatar Dec 07 '23 18:12 mateusfccp

I would assume a new decorator eg. @MultiJsonValues(['valueA', 'a']) to be more proper, or an argument on the existing decorator like so @JsonValue('a', aliases: ['valueA', 'A']).

I wouldn't know if this is possible since I have not looked deeply at the code.

Xazin avatar Dec 21 '23 16:12 Xazin

Maybe the aliases approach would be better, as we should have a "canonical" reference to use in toJson. While fromJson could map from many different values to a single value, when converting this value to JSON, we can only have a single option, which would be the non-alias one.

mateusfccp avatar Jan 04 '24 10:01 mateusfccp