[英]Converting object to an encodable object failed
我收到以下錯誤:
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<…>
我的“病人”class:
import 'package:simple_moment/simple_moment.dart';
class Patient {
String guid;
String _name;
String _surname;
DateTime _updated;
Patient(String guid) {
this.guid = guid;
}
String get name => _name;
set name(v) => _name = v;
String get surname => _surname;
set surname(v) => _surname = v;
DateTime get updated => _updated;
set updated(v) => _updated = v;
// Helper functions
String getFullName() => '$_name $_surname';
String getRelativeLastUpdated() {
var moment = new Moment.now();
return moment.from(_updated);
}
}
您不需要添加任何庫。 你只需要在你的對象中實現 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,
};
}
}
然后你可以調用jsonEncode:
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"}]
您不能只是將任意類實例轉換為 JSON。
一種選擇是為 JsonEncoder() 構造函數提供自定義函數(通過toEncodable
參數)。 這個自定義函數應該將您的自定義對象映射到 JsonEncoder 已經知道如何處理的類型(即數字、字符串、布爾值、空值、列表和帶有字符串鍵的映射)。
https://api.dartlang.org/stable/1.24.3/dart-convert/JsonEncoder-class.html
https://pub.dartlang.org/packages/json_serializable是一個為此生成代碼的包,因此您無需手動編寫它。
就我而言,我試圖在地圖對象中使用整數鍵。 一旦我將它轉換為字符串,錯誤就解決了。 祝你好運。
就我而言,我試圖將 DateTime 直接添加到地圖對象。 一旦我將它轉換為字符串,錯誤就解決了。
之前
return {
'birthDay', instance.birthDay
};
現在
return {
'birthDay', instance.birthDay?.toIso8601String(),
};
我試圖在 dio 請求參數的映射中使用一個Uri
。 將其轉換為 String 解決了該問題。
直接使用redirectUrl
作為Uri
的實例時出錯
data: {
'client_id': identifier,
'client_secret': secret,
'code': code,
'redirect_uri': redirectUrl
});
轉換為String
后沒有錯誤。
data: {
'client_id': identifier,
'client_secret': secret,
'code': code,
'redirect_uri': redirectUrl.toString()
});
就我而言,我在形成 json 請求時添加了多個 '{' 大括號。 取下牙套后,效果很好。
jsonEncode({
{
'isAnonymous': request.isAnonymous,
}});
就我而言,
return file.writeAsString(jsonEncode(addNewScore(scorer, s)));
jsonEncode
拋出錯誤Converting object to an encodable object failed: _LinkedHashMap len:1
{ turnoff: { times: { 15: [ {score: 6, ts: 1640916433851}]}}} <-- 這里 15 實際上是int
所以在將該屬性從int
轉換為String
能夠正確獲取
{“關閉”:{“時間”:{“15”:[{“分數”:6,“ts”:1640916433851}]}}}
JSON 不允許整數鍵或屬性
將名為 toJson() 的方法添加到您需要進行轉換的 class 中。 將轉換邏輯放入該方法並使用this.propety_name
來引用屬性。 看這里的方法示例String toJson() { return jsonEncode({}); }
String toJson() { return jsonEncode({}); }
**有時它會顯示,因為我們沒有使用 controller 添加.text 例如**
它必須看起來像下面提到的“電話”:textEditingController_PhoneNum.text,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.