flutter json_serializable tojson 无法正常工作

flutter json_serializable tojson does not work properly

我正在查看 Order class 示例,发现项目 class 未转换为地图。

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 库没有做这么简单的事情,还是我遗漏了什么?谢谢。

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

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


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

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

中设置即可

explicit_to_json = 真。

并重新生成 .g 文件。它现在应该为您将其转换为地图。

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

在你的 flutter 项目的根目录中创建这个文件 build.yaml,它默认不存在。

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