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

Flutter中jsonEncode转换TransactionModel列表编码失败求助

问题解决:TransactionModel列表转JSON失败

错误原因

你遇到的Converting object to an encodable object failed: Instance of 'TransactionModel'错误,本质是**DateTime类型无法被jsonEncode默认序列化**——你的TransactionModel.toJson()方法直接返回了date(DateTime实例),而Dart的默认JSON编码器不支持这种类型,进而导致整个列表的序列化失败。

解决方案

方案1:修改toJson方法,将DateTime转为可序列化的字符串

在TransactionModel的toJson方法中,把date转换为ISO 8601格式的字符串(这是JSON中存储日期的标准方式):

class TransactionModel {
  String id;
  bool isexpense;
  DateTime date;
  double amount;

  TransactionModel({
    this.amount = 0.00,
    required this.id,
    this.isexpense = true,
    required this.date,
  });

  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'isexpense': isexpense,
      'date': date.toIso8601String(), // 转为ISO字符串
      'amount': amount,
    };
  }
}

之后直接使用jsonEncode即可正常序列化列表:

void main() {
  List<TransactionModel> trans = [
    TransactionModel(
      date: DateTime.now(),
      id: '1',
    ),
  ];

  String result = jsonEncode(trans);
  print(result);
}

如果之后需要把JSON字符串转回TransactionModel实例,在对应的fromJson方法中可以通过DateTime.parse()把字符串转回来:

factory TransactionModel.fromJson(Map<String, dynamic> json) {
  return TransactionModel(
    id: json['id'],
    isexpense: json['isexpense'],
    date: DateTime.parse(json['date']),
    amount: json['amount'],
  );
}

方案2:给jsonEncode传入自定义编码器

如果不想修改toJson方法,可以在调用jsonEncode时,通过toEncodable参数指定如何处理DateTime类型:

void main() {
  List<TransactionModel> trans = [
    TransactionModel(
      date: DateTime.now(),
      id: '1',
    ),
  ];

  String result = jsonEncode(
    trans,
    toEncodable: (object) {
      if (object is DateTime) {
        return object.toIso8601String();
      }
      // 对于TransactionModel类型,调用其toJson方法
      if (object is TransactionModel) {
        return object.toJson();
      }
      // 默认行为,抛出错误
      throw JsonUnsupportedObjectError(object);
    },
  );
  print(result);
}

这种方式更灵活,适合不想改动原有模型类的场景。

内容的提问来源于stack exchange,提问作者Irfan Ganatra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:55:39