You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart Json序列化报错:List类无fromJson构造器该如何修复?

Dart代码错误修复方案

错误原因

  • 代码中直接调用了Dart内置List类型不存在的fromJson构造方法和toJson实例方法,因此触发编译错误。
  • 问题根源是你原本为子项定义的自定义实体类和Dart内置的List集合类重名,编译器识别为内置类后找不到对应方法。

修复方案

根据你的业务场景选择对应方案:

场景1:note、table的子项为自定义业务实体

  1. 首先修改自定义实体类的类名,不要使用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逻辑
}
  1. 替换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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:15:05