如何将DateTime
对象转换为json?它会抛出Converting object to an encodable object failed.
,这是一个错误,还是只有dart
尚未支持它?如果你们知道一些解决方法,请告诉我。
答案 0 :(得分:14)
您也可以通过toEncodable参数创建自己的自定义编码器,而不是使用包装器。
import 'dart:convert' show JSON;
void main() {
var dt = new DateTime.now();
var str = JSON.encode(dt, toEncodable: myEncode);
print(str);
}
dynamic myEncode(dynamic item) {
if(item is DateTime) {
return item.toIso8601String();
}
return item;
}
答案 1 :(得分:2)
首先:JSON不支持日期/时间编码..这通常是通过约定来完成的,具体取决于另一方 - 通常是字符串表示(例如ISO8601,但Microsoft的ASP.NET使用自定义格式)。
第二名:How to convert an object containing DateTime fields to JSON in Dart?
(简而言之:运行时不会序列化DateTime。您需要创建一个包含自定义序列化逻辑的包装器。)
答案 2 :(得分:2)
您正在将对象(DateTime)编码为其他可编码对象 JSON.encode(DateTime.Now()),这在Dart编程中是不可能的。
因此,将其转换为dart支持的Date到String的转换,即: 在末尾添加: .toIso8601String()
JSON.encode(DateTime.Now()。toIso8601String()),这可以解决您的错误。 //我仅以DateTime.Now()为例。
答案 3 :(得分:0)
您也可以在Dart中转换地图。
Map<String, dynamic> encodeMap(Map<String, dynamic> map) {
map.forEach((key, value) {
if (value is DateTime) {
map[key] = value.toString();
}
});
return map;
}
用法:var _map = encodeMap(_data);