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
我正在查看 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