如何使用包 built_value 使用 Map<String, dynamic> 进行序列化

How to serialize with Map<String, dynamic> using the package built_value

有谁知道我如何 serialize/deserialize Map 而不是 toJson e fromJson 方法中默认的 String built_value package?

我需要使用 Firestore,而 setData 方法只接受数据的 Map。

我当前的 Serializer class 具有以下代码。我可以添加一些其他插件或配置来使用地图吗?

final Serializers serializers =
    (_$serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();

方法如下:

 String toJson() {
    return json.encode(serializers.serializeWith(Comment.serializer, this));
  }

  static Comment fromJson(String jsonString) {
    return serializers.deserializeWith(
        Comment.serializer, json.decode(jsonString));
  }

您的 toJson 方法应该如下所示:

  Map<String, dynamic> toJson() {
    return serializers.serializeWith(PlayerModel.serializer, this);
  }

也就是干掉json.encode.

fromJson 类似:

  static PlayerModel fromJson(Map<String, dynamic> json) {
    return serializers.deserializeWith(PlayerModel.serializer, json);
  }

这是我使用的示例 PlayerModel:

abstract class PlayerModel implements Built<PlayerModel, PlayerModelBuilder> {
  @nullable
  String get uid;
  String get displayName;

  PlayerModel._();
  factory PlayerModel([void Function(PlayerModelBuilder) updates]) =
      _$PlayerModel;

  Map<String, dynamic> toJson() {
    return serializers.serializeWith(PlayerModel.serializer, this);
  }

  static PlayerModel fromJson(Map<String, dynamic> json) {
    return serializers.deserializeWith(PlayerModel.serializer, json);
  }

  static Serializer<PlayerModel> get serializer => _$playerModelSerializer;
}