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.

- 15,440
- 7
- 33
- 44

- 3,450
- 5
- 24
- 29
4 Answers
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;
}

- 6,192
- 1
- 20
- 27
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.

- 607
- 9
- 16
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.)

- 1
- 1

- 94,744
- 25
- 252
- 217
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);

- 1,825
- 13
- 20