Flutter json_serializable配置正确但jsonEncode转换Block实例报错如何解决
问题根因
Dart内置的jsonEncode方法默认仅支持对数字、字符串、布尔、List、Map这些内置类型做序列化,它不会自动调用自定义类的toJson方法,所以直接传入Block实例就会抛出转换失败的错误。
正确使用方式
- 方法1:序列化时手动调用类的
toJson方法,这也是官方推荐的写法:
import 'dart:convert'; // 示例代码 Block myBlock = Block(...); String jsonStr = jsonEncode(myBlock.toJson());
- 方法2:给
jsonEncode传入toEncodable参数,指定自定义类的序列化规则:
String jsonStr = jsonEncode(myBlock, toEncodable: (obj) { if (obj is Block) return obj.toJson(); return obj; });
其他需要排查的配置项
- 确认你的代码中已经导入了
dart:convert库,否则jsonEncode方法本身就会异常 - 确认生成的
block.g.dart文件名和part声明完全匹配,注意大小写,Linux/Mac系统文件名大小写敏感,写错会导致生成的代码不生效 - 重新执行构建命令时建议加上清除冲突的参数,避免旧生成文件干扰:
flutter pub run build_runner build --delete-conflicting-outputs
内容的提问来源于stack exchange,提问作者Yoey
相关产品推荐
相关产品推荐

