【问题标题】:How to serialize with Map<String, dynamic> using the package built_value如何使用包 built_value 对 Map<String, dynamic> 进行序列化
【发布时间】:2020-10-20 08:58:03
【问题描述】:

有谁知道我如何序列化/反序列化 Map 而不是 toJsonfromJsonbuilt_value package 方法中的默认字符串?

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

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

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));
  }

【问题讨论】:

    标签: flutter dart google-cloud-firestore built-value


    【解决方案1】:

    您的 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;
    }
    

    【讨论】:

    • 应用您的解决方案时出现以下错误:A value of type 'Object?' can't be returned from the method 'toJson' because it has a return type of 'Map&lt;String, dynamic&gt;'. 知道为什么吗?
    • 我已经在那里描述了我的问题:stackoverflow.com/questions/67742383/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2021-04-13
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    相关资源
    最近更新 更多