如何将FireStore DocumentSnapshot传入json_serializable的fromJson方法?
问题根源
你写的MyClass.fromSnapshot是普通的生成式构造函数,而Dart语法规则明确禁止生成式构造函数重定向到工厂构造函数(也就是你定义的factory MyClass.fromJson),这就是触发错误的核心原因。
修复方案
把fromSnapshot改成工厂构造函数即可,直接在构造函数内部处理快照数据并调用fromJson:
修正后的代码示例:
factory MyClass.fromSnapshot(DocumentSnapshot snapshot) { // 将快照数据转换为Map格式 final jsonData = snapshot.data() as Map<String, dynamic>; // 若需要把文档引用存入实例,可将其加入Map(前提是MyClass类有对应的字段) jsonData['documentReference'] = snapshot.reference; // 调用自动生成的fromJson方法创建实例 return MyClass.fromJson(jsonData); } factory MyClass.fromJson(Map<String, dynamic> json) => _$MyClassFromJson(json);
补充注意点
- 新版Firebase SDK中,
DocumentSnapshot获取数据的方法是data()(带括号),旧版可能是data(无括号),请根据你使用的SDK版本调整。 - 如果要存储
DocumentReference,需在MyClass中声明对应的字段(比如final DocumentReference? documentReference;),还可以用@JsonKey注解指定JSON字段名,避免序列化异常。
内容的提问来源于stack exchange,提问作者giorgio79
相关产品推荐
相关产品推荐

