Could not generate fromJson code for map because of type ItemId.
Map keys must be one of: Object, dynamic, enum, String, BigInt, DateTime, int, Uri.
@JsonSerializable(explicitToJson: true)
class Item {
Item({required this.id, required this.map});
final ItemId id;
// Problem here
final Map<ItemId, ItemId> map;
factory Item.fromJson(Map<String, dynamic> json) => _$ItemFromJson(json);
Map<String, dynamic> toJson() => _$ItemToJson(this);
}
extension type const ItemId(String id) {
factory ItemId.fromJson(String id) {
// Here could be some logic to parse the id
return ItemId(id);
}
String toJson() {
// Here could be some logic to convert the id to a string
return id;
}
}
Also, the case with explicitToJson: false could be tricky because in the ItemId class, toJson is just an extension method, and jsonEncode will simply unbox the String id value. This behavior is unexpected if the extension type has a toJson method.
Codegenerator logs error:
Expected generated code
Also, the case with
explicitToJson: false
could be tricky because in theItemId
class,toJson
is just an extension method, andjsonEncode
will simply unbox theString id
value. This behavior is unexpected if the extension type has atoJson
method.