Dart Json序列化报错:List类无fromJson构造器该如何修复?
Dart代码错误修复方案
错误原因
- 代码中直接调用了Dart内置
List类型不存在的fromJson构造方法和toJson实例方法,因此触发编译错误。 - 问题根源是你原本为子项定义的自定义实体类和Dart内置的
List集合类重名,编译器识别为内置类后找不到对应方法。
修复方案
根据你的业务场景选择对应方案:
场景1:note、table的子项为自定义业务实体
- 首先修改自定义实体类的类名,不要使用
List作为类名避免和内置类冲突,示例如下:
// 自定义笔记子项实体类 class NoteItem { // 替换为你实际的业务字段 String content; int createTime; NoteItem({required this.content, required this.createTime}); NoteItem.fromJson(Map<String, dynamic> json): content = json['content'], createTime = json['create_time']; Map<String, dynamic> toJson() { return { 'content': content, 'create_time': createTime }; } } // 自定义表格子项实体类同理 class TableItem { // 自行实现字段、fromJson、toJson逻辑 }
- 替换Product类的字段声明和序列化逻辑:
class Product { String? status; List<NoteItem>? note; List<TableItem>? table; Product({this.status, this.note, this.table}); Product.fromJson(Map<String, dynamic> json) { status = json['status']; if (json['note'] != null) { note = <NoteItem>[]; json['note'].forEach((v) { note!.add(NoteItem.fromJson(v)); }); } if (json['table'] != null) { table = <TableItem>[]; json['table'].forEach((v) { table!.add(TableItem.fromJson(v)); }); } } Map<String, dynamic> toJson() { final Map<String, dynamic> data = <String, dynamic>{}; data['status'] = status; if (note != null) { data['note'] = note!.map((v) => v.toJson()).toList(); } if (table != null) { data['table'] = table!.map((v) => v.toJson()).toList(); } return data; } }
场景2:note、table就是普通嵌套集合,无自定义实体
直接修改序列化逻辑,不需要调用不存在的自定义方法:
class Product { String? status; List<List<dynamic>>? note; List<List<dynamic>>? table; Product({this.status, this.note, this.table}); Product.fromJson(Map<String, dynamic> json) { status = json['status']; if (json['note'] != null) { note = List<List<dynamic>>.from(json['note'].map((v) => List<dynamic>.from(v))); } if (json['table'] != null) { table = List<List<dynamic>>.from(json['table'].map((v) => List<dynamic>.from(v))); } } Map<String, dynamic> toJson() { final Map<String, dynamic> data = <String, dynamic>{}; data['status'] = status; data['note'] = note; data['table'] = table; return data; } }
内容的提问来源于stack exchange,提问作者user16867349
相关产品推荐
相关产品推荐

