如何将DateTime对象转换为json

时间:2014-02-16 16:24:47

标签: json dart

如何将DateTime对象转换为json?它会抛出Converting object to an encodable object failed.,这是一个错误,还是只有dart尚未支持它?如果你们知道一些解决方法,请告诉我。

4 个答案:

答案 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);

相关问题