Juraj, Check out:
=== Name: Neo-JSON-Core-SvenVanCaekenberghe.46 Author: SvenVanCaekenberghe Time: 13 November 2017, 6:59:13.995868 pm UUID: f412799a-431a-0d00-850e-5c3c05ce5378 Ancestors: Neo-JSON-Core-SvenVanCaekenberghe.45 Fix the NeoJSONWriter>>#writeNil: true option by adding a short circuit to NeoJSONWriter>>nextPut:as: (as reported by Juraj Kubelka) Add #testRectanglePointsWithNil === Name: Neo-JSON-Tests-SvenVanCaekenberghe.44 Author: SvenVanCaekenberghe Time: 13 November 2017, 6:59:37.365898 pm UUID: 35acdd9b-431a-0d00-850f-878405ce5378 Ancestors: Neo-JSON-Tests-SvenVanCaekenberghe.43 Fix the NeoJSONWriter>>#writeNil: true option by adding a short circuit to NeoJSONWriter>>nextPut:as: (as reported by Juraj Kubelka) Add #testRectanglePointsWithNil === These should fix your last case. I used your example in the new unit test. Note that #allowNil on a mapper is about reading, not writing. HTH, Sven > On 13 Nov 2017, at 17:10, Juraj Kubelka <[email protected]> wrote: > > Hi, > > I have just found the answer for the reader: > > -=-=-=- > rectangleJson := '{ > "origin" : null, > "corner" : null > }'. > > (NeoJSONReader on: rectangleJson readStream) > mapInstVarsFor: Point; > for: Point do: [ :mapping | > mapping allowNil ]; > for: Rectangle do: [ :mapping | > (mapping mapInstVar: #origin) valueSchema: Point. > (mapping mapInstVar: #corner) valueSchema: Point ]; > nextAs: Rectangle. > -=-=-=- > > I have an impression that there is a bug in the writer. While the following > example works: > > -=-=-=- > String streamContents: [ :stream | > (NeoJSONWriter on: stream) > for: Point do: [ :mapping | > mapping mapAllInstVars. > mapping allowNil ]; > for: Rectangle do: [ :mapping | > (mapping mapInstVar: #origin) valueSchema: Point. > (mapping mapInstVar: #corner) valueSchema: Point ]; > nextPut: Rectangle new ]. > -=-=-=- > > the following example does not work: > > -=-=-=- > String streamContents: [ :stream | > (NeoJSONWriter on: stream) > for: Point do: [ :mapping | > mapping mapAllInstVars. > mapping allowNil ]; > for: Rectangle do: [ :mapping | > (mapping mapInstVar: #origin) valueSchema: Point. > (mapping mapInstVar: #corner) valueSchema: Point ]; > writeNil: true; > nextPut: Rectangle new ]. > -=-=-=- > > What do you think? > Juraj > >> On Nov 13, 2017, at 12:50, Juraj Kubelka <[email protected]> wrote: >> >> Hi, >> >> Please, how should I modify the mapping to be able to parse the following >> example? >> >> -=-=-=- >> rectangleJson := '{ >> "origin" : null, >> "corner" : null >> }'. >> >> (NeoJSONReader on: rectangleJson readStream) >> mapInstVarsFor: Point; >> for: Rectangle do: [ :mapping | >> (mapping mapInstVar: #origin) valueSchema: Point. >> (mapping mapInstVar: #corner) valueSchema: Point ]; >> nextAs: Rectangle. >> -=-=-=- >> >> I receive from a server JSON messages including null values. >> Can we say use Point value schema or null? How? >> >> In the documentation I can see the example: >> >> -=-=-=- >> String streamContents: [ :stream | >> (NeoJSONWriter on: stream) >> mapAllInstVarsFor: Point; >> writeNil: true; >> nextPut: Point new ]. >> -=-=-=- >> that produces {"x":null,"y":null} >> >> But I do not see how to apply this for the following example: >> -=-=-=- >> String streamContents: [ :stream | >> (NeoJSONWriter on: stream) >> mapAllInstVarsFor: Point; >> for: Rectangle do: [ :mapping | >> (mapping mapInstVar: #origin) valueSchema: Point. >> (mapping mapInstVar: #corner) valueSchema: Point ]; >> writeNil: true; >> nextPut: Rectangle new ]. >> -=-=-=- >> >> Thanks, >> Juraj >> >> >
