扑json_serializable tojson无法正常工作

时间:2018-11-24 13:17:37

标签: flutter json-serialization

我正在查看Order类示例,发现Item类未转换为Map。

class Order {
  int count;
  int itemNumber;
  bool isRushed;
  Item item; 
  Map<String, dynamic> toJson() => _$OrderToJson(this);
}

生成的.g文件具有以下内容:

Map<String, dynamic> _$OrderToJson(Order instance) {
  ...
  writeNotNull('item', instance.item);
  ...
  return val;
}

订单地图中的商品仍为商品类型,但我希望它也能自动转换为地图。生成的.g文件应具有以下内容

writeNotNull('item', instance.item.toJson());

我不想手动添加它,因为当重新生成.g文件时,它将被覆盖。为什么json_serializable lib没有做这么简单的事情,还是我缺少了什么?谢谢。

3 个答案:

答案 0 :(得分:2)

现在我找到了解决方案,只需在build.yaml中设置

explicit_to_json = true。

并重新生成.g文件。它现在应该可以将其转换为Map。

答案 1 :(得分:0)

json.encode(...)将尝试在toJson()类上找到一个Item方法,并正确序列化该项目。不需要生成的序列化逻辑来调用toJson()

您只需要确保Item类也用@JsonSerializable()注释并实现toJson()


此外,您永远不会手动调用toJson(),而是将订单对象传递给json.encode(...)

答案 2 :(得分:0)

对于Firebase,您还需要any_map选项,因为来自Firebase的地图是<dynamic, dynamic>,否则会期望<String, dynamic>

在flutter项目的根目录中将此文件创建为build.yaml,默认情况下不存在。

targets:
  $default:
    builders:
      json_serializable:
        options:
          any_map: true
          explicit_to_json: true