To: squeak-dev@lists.squeakfoundation.org
Hi,
I used JSON with the addition of carrying the class (JSON being Javascript born has no concept of classes) because it requires only very little work after loading the JSON package. (And because I've been doing some web application where I needed JSON anyway.)
Each class needs on the class side:
constructFromJson: j
^ self new constructFromJson: j
and on the instance side:
jsonWriteOn: aStream
Json renderInstanceVariables:
(self class allInstVarNames collect: [:ea| ea asSymbol])
of: self
on: aStream
and:
constructFromJson: j
j keysAndValuesDo: [:key :value|
self instVarNamed: key put: value]
Simple, stupid and good enough for several of my applications.
This should work across dialects if the destination image has the required classes in the same shape. The @Classname designator is a Smalltalk specific extension to JSON. I think it is not good enough to transfer object trees with cyclic dependencies. Other languages with a different ideas of how a class is constructed it might need more work.
JSON excerpt:
[@IndividualGenom{"halfNum":77,"fitness":2.364011719201257,"fitnesses":null,"geneValues":[-0.7875619210225705,-1.1191086825115324,2.2987547782235476,-= 2.1996847933965746,3.3254889274350594,-1.7481778033261461 ......
Cheers,
Herbert