Norbert, On 25 Sep 2013, at 18:21, Norbert Hartl <norb...@hartl.name> wrote:
> Is it possible to make a mapping for NeoJSON that an object shape maps to a > different shape. I mean if it is possible to have a class with instVars: > > Foo > +name > +x > +y > > that maps to > > { > 'name' ; …, > 'point' : { > x : …, > y : …. } > } > > thanks, > > Norbert With custom mappings you can do pretty much what you want. Here is one way it can be done: String streamContents: [ :out | (NeoJSONWriter on: out) mapAllInstVarsFor: Point; for: NeoJSONTestObject2 customDo: [ :mapping | mapping writer: [ :jsonWriter :object | jsonWriter writeMapStreamingDo: [ :jsonMapWriter | jsonMapWriter writeKey: #id value: object id; writeKey: #data value: object data; writeKey: #extent value: object width @ object height ] ] ]; nextPut: NeoJSONTestObject2 example1 ]. (NeoJSONReader on: '{"id":13,"data":"aaa","extent":{"x":250,"y":110}}' readStream) for: NeoJSONTestObject2 customDo: [ :mapping | mapping reader: [ :jsonReader | | object | object := NeoJSONTestObject2 new. jsonReader parseMapKeysAndValuesDo: [ :key :value | key = #id ifTrue: [ object id: value ]. key = #data ifTrue: [ object data: value ]. key = #extent ifTrue: [ object width: (value at: #x); height: (value at: #y) ] ]. object ] ]; nextAs: NeoJSONTestObject2. Regards, Sven