schultek / dart_mappable

Improved json serialization and data classes with full support for generics, inheritance, customization and more.
https://pub.dev/packages/dart_mappable
MIT License
135 stars 20 forks source link

Exception: Class as Map Key #183

Closed xErik closed 3 months ago

xErik commented 3 months ago

Unlikely that many people structure their data like below.

But I stumpled upon it.

@MappableClass()
class Outer with OuterMappable {
  Map<Inner, int> map;
  Outer(this.map);
}

@MappableClass()
class Inner with InnerMappable {}

main() {
  final o = Outer({Inner(): 10});
  print(o.toJson());
}
Unhandled exception:
Converting object to an encodable object failed: _Map len:1
#0      _JsonStringifier.writeObject (dart:convert/json.dart:793:7)      
#1      _JsonStringifier.writeMap (dart:convert/json.dart:874:7)
#2      _JsonStringifier.writeJsonValue (dart:convert/json.dart:829:21)  
#3      _JsonStringifier.writeObject (dart:convert/json.dart:784:9)      
#4      _JsonStringStringifier.printOn (dart:convert/json.dart:982:17)   
#5      _JsonStringStringifier.stringify (dart:convert/json.dart:967:5)  
#6      JsonEncoder.convert (dart:convert/json.dart:345:30)
#7      JsonCodec.encode (dart:convert/json.dart:231:45)
#8      jsonEncode (dart:convert/json.dart:114:10)
#9      InterfaceMapperBase.encodeJson (package:dart_mappable/src/mappers/interface_mapper.dart:220:7)
#10     OuterMappable.toJson (package:red_whip/model/consequence/test2.mapper.dart:50:44)
#11     main (package:red_whip/model/consequence/test2.dart:16:11)       
#12     _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#13     _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
schultek commented 3 months ago

Its impossible to serialize a non String key to json, simply because the json format does not support this. This has nothing to do with dart_mappable.

You can do .toMap() though