如何在Dart Extended ListBase类中使用json_annotation

时间:2019-02-12 16:04:51

标签: dart angular-dart

所以我有一个@JsonSerializable类,可以正常工作。

@JsonSerializable()
class BaseValue {
  String id;
  var value;
  DateTime valueDate;

  BaseValue({
    this.id,
    this.value,
    this.valueDate
  });
  factory BaseValue.fromJson(Map<String, dynamic> json) => _$BaseValueFromJson(json);
  Map<String, dynamic> toJson() => _$BaseValueToJson(this);
}

不,我想为扩展的ListBase类启用相同的fromJson toJson,但找不到实现此方法的方法。

class BaseValues<BaseValue> extends ListBase<BaseValue> {
  final List<BaseValue> l = [];
  BaseValues();

  void set length(newLength) => l.length = newLength;
  int get length => l.length;
  BaseValue operator [](int index) => l[index];
  void operator []=(int index, BaseValue value) => l[index] = value;
}

也许我需要使用其他东西来代替ListBase。

在此先感谢您提供的帮助。

1 个答案:

答案 0 :(得分:0)

有可能,但这并非易事。您需要创建自定义TypeHelper来支持您的课程。

然后,如果要使用pub run build_runner...,则需要创建一个自定义构建器,该构建器实例化JsonSerializableGenerator的实例并包含TypeHelper的实例。

这里有一个待处理的提交将为您提供更多的自由-https://github.com/dart-lang/json_serializable/commit/4f19d468bf05eed3e4a8ebc27244fc3b8d411dc9 –但是您仍然必须处理BaseValues的可能的泛型类型args。