platform/packages/json_god/lib/src/serialize.dart

36 lines
1.1 KiB
Dart
Raw Normal View History

2021-05-14 12:24:45 +00:00
part of angel3_json_god;
2021-03-07 15:56:09 +00:00
/// Serializes any arbitrary Dart datum to JSON. Supports schema validation.
String serialize(value) {
var serialized = serializeObject(value);
2021-04-10 12:42:55 +00:00
logger.info('Serialization result: $serialized');
2021-03-07 15:56:09 +00:00
return json.encode(serialized);
}
/// Transforms any Dart datum into a value acceptable to json.encode.
serializeObject(value) {
if (_isPrimitive(value)) {
2021-04-10 12:42:55 +00:00
logger.info("Serializing primitive value: $value");
2021-03-07 15:56:09 +00:00
return value;
} else if (value is DateTime) {
2021-04-10 12:42:55 +00:00
logger.info("Serializing this DateTime: $value");
2021-03-07 15:56:09 +00:00
return value.toIso8601String();
} else if (value is Iterable) {
2021-04-10 12:42:55 +00:00
logger.info("Serializing this Iterable: $value");
2021-03-07 15:56:09 +00:00
return value.map(serializeObject).toList();
} else if (value is Map) {
2021-04-10 12:42:55 +00:00
logger.info("Serializing this Map: $value");
2021-03-07 15:56:09 +00:00
return serializeMap(value);
} else
return serializeObject(reflection.serialize(value, serializeObject));
}
/// Recursively transforms a Map and its children into JSON-serializable data.
Map serializeMap(Map value) {
Map outputMap = {};
value.forEach((key, value) {
outputMap[key] = serializeObject(value);
});
return outputMap;
}