Flutter中Json编码为字符串列表失败:Converting object to encodable object错误
解决「Converting object to an encodable object」JSON编码错误
你遇到的这个错误是因为JSON编码器无法序列化非可编码对象,具体问题出在两个地方:
1. CartModel的toJson方法中未调用ProductModel的toJson函数
在CartModel的toJson方法里,product字段你写的是this.product!.toJson,这是把函数本身赋值给了字段,而不是调用函数得到返回的Map对象。jsonEncode无法序列化函数类型,所以触发了错误。
修复代码:
Map<String, dynamic> toJson() { return { "id": this.id, "name": this.name, "price": this.price, "img": this.img, "quantity": this.quantity, "isExist": this.isExist, "time": this.time, "product": this.product!.toJson(), // 加上括号,调用函数获取Map }; }
2. CartModel的fromJson方法中isExist的key多了空格
在CartModel.fromJson里,你写的是this.isExist = json['isExist '];,key后面多了一个空格,这样反序列化时会找不到对应的值,导致isExist始终为null。
修复代码:
CartModel.fromJson(Map<String, dynamic> json) { this.id = json['id']; this.name = json['name']; this.price = json['price']; this.img = json['img']; this.quantity = json['quantity']; this.isExist = json['isExist']; // 去掉key后面的空格 this.time = json['time']; this.product = ProductModel.fromJson(json['product']); }
验证修复
修改完这两处后,重新调用addToCartList方法,JSON编码就能正常进行,SharedPreferences也能正确存储String列表了。
内容的提问来源于stack exchange,提问作者Sahil Tiwade
相关产品推荐
相关产品推荐

