Как преобразовать объект DateTime в json

Как преобразовать объект DateTime в json? Он выбрасывает Converting object to an encodable object failed., так это ошибка, или просто dart еще не поддерживают ее? Если вы, ребята, знаете некоторое обходное решение, пожалуйста, дайте мне знать.

Ответ 1

Вместо использования обертки вы также можете создать свой собственный пользовательский кодер, передав аргумент 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;
}

Ответ 2

сначала: JSON не поддерживает кодирование даты/времени. Обычно это делается по соглашению в зависимости от другой стороны - обычно это строковое представление (например, ISO8601, но Microsoft ASP.NET использует собственный формат).

second: Как преобразовать объект, содержащий поля DateTime, в JSON в Dart?
(Короче говоря: Runtime не сериализует DateTime. Вам нужно создать оболочку с пользовательской логикой сериализации.)

Ответ 3

Вы также можете просто конвертировать свою карту в дартс.

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