如何序列化包含抽象集合 class 的 class?
How to serialize a class containing a collection of an abstract class?
让我们看一下由三个 class 组成的简单 class 层次结构:
抽象基础class:
abstract class BaseClass {
String name;
BaseClass(this.name);
}
从抽象基础 class.
派生的一些 classes
@JsonSerializable()
class ConcreteClass extends BaseClass {
int someValue;
ConcreteClass(this.someValue, String name) : super(name);
factory ConcreteClass.fromJson(Map<String, dynamic> json) => _$ConcretClassFromJson(json);
Map<String, dynamic> toJson() => _$ConcreteClassToJson(this);
}
最后是一个主要的 class,它将所有具体的 class 存储在一个集合中。这是一个示例:
@JsonSerializable()
class DataJuggler {
Set<BaseClass> allTheDataInTheWorld = Set<BaseClass>();
DataJuggler();
factory DataJuggler.fromJson(Map<String, dynamic> json) => _$DataJugglerFromJson(json);
Map<String, dynamic> toJson() => _$DataJugglerToJson(this);
}
启动 build_runner
生成 json 序列化代码时,失败并显示:
[SEVERE] json_serializable:json_serializable on lib/what_an_awesome_app/data_juggler.dart:
Could not generate `fromJson` code for `allTheDataInTheWorld` because of type `BaseClass`.
package:/totally_awesome/what_an_awesome_app/data_juggler.dart:12:25
╷
12 │ Set<BaseClass> allTheDataInTheWorld = Set<BaseClass>();
╵
现在的问题是,这里出了什么问题?或者更好:如何获得为 DataJuggler
class 生成的 json 序列化代码?非常欢迎您的建议。谢谢。
您需要手动写下一些样板代码:https://github.com/google/json_serializable.dart/issues/145, https://github.com/google/json_serializable.dart/issues/371, and Extend with fromJson in dart。
请注意,您的 BaseClass 当前缺少 fromJson
,因此 DataJuggler 肯定无法生成 fromJson
!
让我们看一下由三个 class 组成的简单 class 层次结构:
抽象基础class:
abstract class BaseClass { String name; BaseClass(this.name); }
从抽象基础 class.
派生的一些 classes@JsonSerializable() class ConcreteClass extends BaseClass { int someValue; ConcreteClass(this.someValue, String name) : super(name); factory ConcreteClass.fromJson(Map<String, dynamic> json) => _$ConcretClassFromJson(json); Map<String, dynamic> toJson() => _$ConcreteClassToJson(this); }
最后是一个主要的 class,它将所有具体的 class 存储在一个集合中。这是一个示例:
@JsonSerializable() class DataJuggler { Set<BaseClass> allTheDataInTheWorld = Set<BaseClass>(); DataJuggler(); factory DataJuggler.fromJson(Map<String, dynamic> json) => _$DataJugglerFromJson(json); Map<String, dynamic> toJson() => _$DataJugglerToJson(this); }
启动 build_runner
生成 json 序列化代码时,失败并显示:
[SEVERE] json_serializable:json_serializable on lib/what_an_awesome_app/data_juggler.dart:
Could not generate `fromJson` code for `allTheDataInTheWorld` because of type `BaseClass`.
package:/totally_awesome/what_an_awesome_app/data_juggler.dart:12:25
╷
12 │ Set<BaseClass> allTheDataInTheWorld = Set<BaseClass>();
╵
现在的问题是,这里出了什么问题?或者更好:如何获得为 DataJuggler
class 生成的 json 序列化代码?非常欢迎您的建议。谢谢。
您需要手动写下一些样板代码:https://github.com/google/json_serializable.dart/issues/145, https://github.com/google/json_serializable.dart/issues/371, and Extend with fromJson in dart。
请注意,您的 BaseClass 当前缺少 fromJson
,因此 DataJuggler 肯定无法生成 fromJson
!