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(),
};