Json 将对象转换为可编码对象失败

Json 将对象转换为可编码对象失败,json,serialization,dart,encode,Json,Serialization,Dart,Encode,我得到以下错误: Converting object to an encodable object failed: Instance of 'Patient' #0 _JsonStringifier.writeObject (dart:convert/json.dart:674) #1 _JsonStringifier.writeList (dart:convert/json.dart:724) #2 _JsonStringifier.writeJsonValue

我得到以下错误:

Converting object to an encodable object failed: Instance of 'Patient'
#0      _JsonStringifier.writeObject (dart:convert/json.dart:674)
#1      _JsonStringifier.writeList (dart:convert/json.dart:724)
#2      _JsonStringifier.writeJsonValue (dart:convert/json.dart:706)
#3      _JsonStringifier.writeObject (dart:convert/json.dart:664)
#4      _JsonStringStringifier.printOn (dart:convert/json.dart:873)
#5      _JsonStringStringifier.stringify (dart:convert/json.dart:855)
#6      JsonEncoder.convert (dart:convert/json.dart:256)
#7      JsonCodec.encode (dart:convert/json.dart:155)
#8      Persistence.saveLatestPatients (/Users/dean/Library/Developer/CoreSimulator/Devices/570CC18D-95BF-4062-8523-9C78E106D0CF/data/Containers/Data/Application/70CAEFAA-4AE3-4CBF-A85F-39161E472C83/tmp/flutter_prototypev6jYbr/flutter_prototype/lib/utils/persistence.dart:32:23)
<asynchronous suspension>
#9      _HomeScreenState.fetchData.<anonymous closure> (/Users/dean/Librar<…>

您不能仅仅将任意类实例转换为JSON

一个选项是向jsonecoder()构造函数提供一个自定义函数(通过
toEncodable
参数)。这个自定义函数应该将您的自定义对象映射到JSONECODER已经知道如何处理的类型(即数字、字符串、布尔值、null、列表和带有字符串键的映射)

是一个生成代码的包,因此您不需要手动编写


另请参见

在我的例子中,我试图在映射对象中使用整数键。
一旦我把它转换成字符串,错误就被解决了。祝你好运。

你不需要添加任何库。您只需在对象中实现fromJson和toJson函数

例如:

class LinkItem {
  final String name;
  final String url;

  LinkItem({this.name, this.url});

  LinkItem.fromJson(Map<String, dynamic> json)
      : name = json['n'],
        url = json['u'];

  Map<String, dynamic> toJson() {
    return {
      'n': name,
      'u': url,
    };
  }
}

在我的例子中,我试图直接向map对象添加DateTime。一旦我把它转换成字符串,错误就被解决了

以前

return {
  'birthDay', instance.birthDay
};
现在


在我的例子中,我使用DIO网络库直接将模型类对象作为请求参数传递。在进行API调用之前,我必须将其转换为json。不知道为什么它的UPVOUT数如此之少,这太棒了!只要编写一个toJson()方法,一切都会正常工作。最乐观的回答根本没用。救了我一天,救了我一命。非常感谢@live love:)完全是这样,尽管是一个愚蠢的XD
List<LinkItem> list = await getUserLinks();
list.add(linkItem);    
String json = jsonEncode(list);
  [{"n":"Google","u":"https://www.google.com/"},{"n":"Test","u":"https://www.test.com/"},{"n":"etc","u":"etc"}]
return {
  'birthDay', instance.birthDay
};
return {
   'birthDay', instance.birthDay?.toIso8601String(),
};