[Cl-perec-devel] JSON serialization

Mihai Bazon mihai at bazon.net
Sat Sep 19 12:11:43 UTC 2009


(declare (ignorable (last-email-from 'mishoo)))   ;-)

My mistake, it's doable without touching perec...  I should take more
MOP for breakfast before posting to the list.

Cheers,
-Mihai

Mihai Bazon <mihai at bazon.net> wrote:
> Hi folks,
> 
> I'm trying to use a custom keyword in slot definitions (:serializable)
> that would let a base class know whether that slot is supposed to be
> serialized in JSON (to implement a generic way to JSONize perec
> objects).
> 
> Defclass-star allows arbitrary keywords, but the problem is that when
> defassociation is called, the values of :serializable passed in class
> definition are lost. What happens, I think, is that the class gets
> redefined but the system uses only slot keywords declared in
> persistent-slot-definition and subclasses.
> 
> Talked to some folks on the IRC, the general opinion is to modify
> cl-perec, but I don't like to use modified versions of libraries I
> didn't wrote :).  So my question is, if I implement generic support for
> encode-json in cl-perec, would it be acceptable to include the patch in
> the official repository?  This support would mean the following:
> 
> * keyword :serializable (or :json?) supported in slot definitions with
>   one of the following values: :always (default), :light, :heavy,
>   :never
> 
> * (encode-json persistent-object stream) will write a JSON
>   representation of the object that includes :always and :light slots
>   (and the OID)
> 
> * (let ((prc::*full-json* t)) (encode-json object stream)) will include
>   the :heavy slots as well
> 
> * associations will be serialized as OID (for 1-1) or [ OID, OID ... ]
>   (for 1-n, m-n)
> 
> All of the above is pretty easy to do without touching perec, but I just
> miss the :serializable keyword support.  (or maybe I just don't know
> enough Lisp and there's an easy way around it?  I did investigate
> creating my own metaclass and slot definition classes, but concluded
> that it's too much boilerplate code for such simple functionality)
> 
> Cheers,
> -Mihai
> _______________________________________________
> Cl-perec-devel mailing list
> Cl-perec-devel at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/cl-perec-devel



More information about the cl-perec-devel mailing list