在项目中是否有任何合理的方式将json_serializable模型和build_value模型混合使用?

时间:2019-06-26 10:10:48

标签: json flutter dart built-value

问题如下,我有一个flutter项目,其中某些类使用built_value,而某些类使用json_serializable。 两者都可以单独很好地工作,但是使用非常不同的序列化/反序列化JSON的方式。

built_value通过Serializers发挥作用,而json_serializer使用fromJson / toJson方法的dart:convert约定

我找不到一种简单的方法来组合这些。

我正在寻找的东西是这样的:

假设我有一个@JsonSerializable()类Person

@JsonSerializable()
class Person {
  final String name;
  final int age;

  Person(this.name, this.age);

  factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);

  Map<String, dynamic> toJson() => _$PersonToJson(this);

}

和一个build_value类SomeAppState

abstract class SomeAppState implements Built<SomeAppState, SomeAppStateBuilder> {

  @nullable
  Person get currentPerson;

  SomeAppState._();
  factory SomeAppState([void Function(SomeAppStateBuilder) updates]) = _$SomeAppState;

  static Serializer<SomeAppState> get serializer => _$someAppStateSerializer;

}

似乎没有一种合理的方法来对SomeAppState的对象进行序列化/反序列化,因为build_value并不关心fromJson / toJson,并且似乎也没有其他方法可以这样做。要么是因为build_value序列化器不产生Map<String, dynamic>

我被迫选择了一个或一个,或者只是接受您不能在两者之间互操作,还是我错过了一些聪明的东西?

1 个答案:

答案 0 :(得分:0)

如果您使用built_value

Map<String, dynamic>将产生StandardJsonPlugin

您也许可以使用它来插入dart:convert的{​​{1}}:

https://api.dartlang.org/stable/2.7.0/dart-convert/jsonEncode.html