36 lines
1.1 KiB
Dart
36 lines
1.1 KiB
Dart
part of angel3_json_god;
|
|
|
|
/// Serializes any arbitrary Dart datum to JSON. Supports schema validation.
|
|
String serialize(value) {
|
|
var serialized = serializeObject(value);
|
|
logger.info('Serialization result: $serialized');
|
|
return json.encode(serialized);
|
|
}
|
|
|
|
/// Transforms any Dart datum into a value acceptable to json.encode.
|
|
serializeObject(value) {
|
|
if (_isPrimitive(value)) {
|
|
logger.info("Serializing primitive value: $value");
|
|
return value;
|
|
} else if (value is DateTime) {
|
|
logger.info("Serializing this DateTime: $value");
|
|
return value.toIso8601String();
|
|
} else if (value is Iterable) {
|
|
logger.info("Serializing this Iterable: $value");
|
|
return value.map(serializeObject).toList();
|
|
} else if (value is Map) {
|
|
logger.info("Serializing this Map: $value");
|
|
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;
|
|
}
|