Flutter/Dart调用fromJson提示需Map却传入_JsonMap怎么解决
问题根源澄清
_JsonMap 是 Dart dart:convert 库中JSON解析后的内部实现类型,本身就实现了 Map<String, dynamic> 接口,外层传入fromJson的参数本身没有类型问题,你误读了报错的堆栈层级,错误实际发生在生成的序列化代码内部处理嵌套字段的阶段。
具体错误原因
你定义的 Section 类中 permissions 字段类型和实际JSON结构不匹配:
- 代码里声明的类型是
List<UserBasedPermission>?,期望接收数组结构 - 测试JSON中
permissions是单个对象结构:{"read_write_users":null,...},反序列化时会尝试把对象转成列表,触发类型不匹配报错。
解决步骤
- 修正permissions字段类型
将Section类中的permissions声明改为匹配JSON结构的单个对象类型:
// 修正前 // late List<UserBasedPermission>? permissions; // 修正后 late UserBasedPermission? permissions;
- 补齐嵌套类的序列化配置
确保所有嵌套的自定义类型都完成json_serializable配置:
BaseInfo、Comment、UserBasedPermission三个类都要添加@JsonSerializable()注解- 三个类都要实现对应的
fromJson工厂方法、toJson实例方法
- 重新生成序列化代码
执行命令重新生成.g.dart序列化文件:
# 纯Dart项目 dart run build_runner build # Flutter项目 flutter pub run build_runner build
- 可选:显式转换外层JSON类型
如果运行时仍有外层类型提示问题,可显式转换解析结果:
Map<String, dynamic> parsedJson = Map<String, dynamic>.from(jsonDecode(test));
内容的提问来源于stack exchange,提问作者Abenstex
相关产品推荐
相关产品推荐

