k-paxian / dart-json-mapper

Serialize / Deserialize Dart Objects to / from JSON
https://pub.dev/packages/dart_json_mapper
Other
400 stars 33 forks source link

Deserialization fails when using [enumConverterNumeric] #94

Closed caneva20 closed 3 years ago

caneva20 commented 3 years ago

Hi @k-paxian!

Today I faced a problem when using a custom enum converter. If you configure the mapper to use enumConverterNumeric and then try to deserialize the json value it fails.

Minimum reproducible code:

Enum:

@jsonSerializable
enum MyEnum { valueA, valueB }
void main() {
  initializeJsonMapper(adapters: [
    JsonMapperAdapter(
      converters: {
        Enum: enumConverterNumeric,
      },
    )
  ]);

  var json = JsonMapper.serialize(MyEnum.valueA);

  //This fails
  var myEnum = JsonMapper.deserialize<MyEnum>(json);
}

This code throws:

E/flutter ( 6045): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: type 'String' is not a subtype of type 'MyEnum'
E/flutter ( 6045): #0      JsonMapper.deserialize (package:dart_json_mapper/src/mapper.dart:59:5)
E/flutter ( 6045): #1      main (package:redacted/main.dart:22:25)
E/flutter ( 6045): #2      _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:231:25)
E/flutter ( 6045): #3      _rootRun (dart:async/zone.dart:1190:13)
E/flutter ( 6045): #4      _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter ( 6045): #5      _runZoned (dart:async/zone.dart:1630:10)
E/flutter ( 6045): #6      runZonedGuarded (dart:async/zone.dart:1618:12)
E/flutter ( 6045): #7      _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:223:5)
E/flutter ( 6045): #8      _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
E/flutter ( 6045): #9      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
k-paxian commented 3 years ago

Thank you for letting me know. Should be fixed now.