38

How to convert DateTime object to json? It throws Converting object to an encodable object failed., so is this a bug or it's just dart haven't yet support it? If you guys know some workaround please let me know.

Patrice Chalin
  • 15,440
  • 7
  • 33
  • 44
Faris Nasution
  • 3,450
  • 5
  • 24
  • 29

4 Answers4

50

Rather than using a wrapper, you can also create your own custom encoder passing the toEncodable argument.

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;
}
Matt B
  • 6,192
  • 1
  • 20
  • 27
11

you are encoding object(DateTime) into other encodable object JSON.encode(DateTime.Now()) which is not possible in dart programming.

So, convert it to dart supported Date to String conversion that is : add : .toIso8601String() at the end

JSON.encode(DateTime.Now().toIso8601String()),this resolves your error. // i am taking DateTime.Now() just for example.

akash maurya
  • 607
  • 9
  • 16
2

first: JSON does not support date/time encoding.. this is usually done by convention depending on the other party - usually a string representation (e.g. ISO8601 but Microsoft's ASP.NET uses a custom format).

second: How to convert an object containing DateTime fields to JSON in Dart?
(In short: Runtime does not serialise DateTime. You'll need to create a wrapper with custom serialisation logic.)

Community
  • 1
  • 1
Martin Ullrich
  • 94,744
  • 25
  • 252
  • 217
0

You could also just convert your map in Dart.

Map<String, dynamic> encodeMap(Map<String, dynamic> map) {
  map.forEach((key, value) {
    if (value is DateTime) {
      map[key] = value.toString();
    }
  });
  return map;
}

Usage: var _map = encodeMap(_data);

Rody Davis
  • 1,825
  • 13
  • 20