0

我在尝试使用 Dart/Flutter 中的 json_serializable 包对继承的类进行反序列化时遇到问题。这是代码示例:

@JsonSerializable(explicitToJson: true)
class Document  {
  String id = UniqueKey().toString();
  String name='';
  List<Component> components=[];   //list of Components
  Document({required this.components}):super();
  Document.empty();

  factory Document.fromJson(Map<String, dynamic> json) =>_$DocumentFromJson(json);
  Map<String, dynamic> toJson() => _$DocumentToJson(this);
}

@JsonSerializable()
class Component {   //Component Base Class
  String id = UniqueKey().toString();
  String name='';

  Component();

  factory Component.fromJson(Map<String, dynamic> json) =>_$ComponentFromJson(json);
  Map<String, dynamic> toJson() => _$ComponentToJson(this);
}

@JsonSerializable()
class TextComponent extends Component{   //inherited from Component
  String text='';
  TextComponent():super();
  TextComponent.text({required this.text}):super();

  factory TextComponent.fromJson(Map<String, dynamic> json) =>_$TextComponentFromJson(json);
  @override Map<String, dynamic> toJson() => _$TextComponentToJson(this);

}

这是测试:

void main() {

  //creating json from object
  Document d = Document(components:[TextComponent.text(text: 'text')] );
  print(d.components[0].runtimeType); //-type is : TextComponent
  var json = d.toJson();

  //create object from json
  var newDoc = Document.fromJson(json);
  print(newDoc.components[0].runtimeType);  //-type is : Component which is the base class

}

反序列化后继承的类被向下转换为基类,但我需要继承的类。

4

1 回答 1

0

好的,我发现这个包可以做所有事情: https ://pub.dev/packages/dart_mappable#custom-mappers

于 2022-01-11T18:26:03.830 回答