From cfa64527afe667bdd428335db5b0a74ebfa4d429 Mon Sep 17 00:00:00 2001 From: Louis Chatriot Date: Thu, 2 May 2013 21:49:01 +0200 Subject: [PATCH] Can serialize numbers, strings, booleans, nulls and dates --- lib/model.js | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/lib/model.js b/lib/model.js index 2edf1b1..a931f9a 100644 --- a/lib/model.js +++ b/lib/model.js @@ -4,15 +4,44 @@ * Copying */ +var dateToJSON = function () { return { $$date: this.toString() }; } + , originalDateToJSON = Date.prototype.toJSON + + function serialize (obj) { - return JSON.stringify(obj); + var res; + + // Keep track of the fact this is a Date object + Date.prototype.toJSON = dateToJSON; + + res = JSON.stringify(obj, function (k, v) { + if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || v === null) { return v; } + if (v && v.constructor && v.constructor.name === 'Date') { return { $$date: v.toString() }; } + + return v; + }); + + // Return Date to its original state + Date.prototype.toJSON = originalDateToJSON; + + return res; } function deserialize (rawData) { - return JSON.parse(rawData); + return JSON.parse(rawData, function (k, v) { + if (k === '$$date') { return new Date(v); } + if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || v === null) { return v; } + if (v && v.$$date) { return v.$$date; } + + return v; + }); } + + + + // Interface module.exports.serialize = serialize; module.exports.deserialize = deserialize;