Is it possible to serialize optional values โโin F # using FsPickler so that:
- when the value of Some (), the contained value is serialized
- and when he is absent, is he not serialized at all?
In the following code example:
type Person = { name: string; age: int option } let data = [ { name = "Helena"; age = Some(24) }; { name = "Peter"; age = None } ] let jsonSerializer = FsPickler.CreateJsonSerializer(true, true) let streamWriter = new StreamWriter(@"C:\output.json") let out = jsonSerializer.SerializeSequence(streamWriter, data)
The output.json file contains the following JSON:
[ { "name": "Helena", "age": { "Some": 24 } }, { "name": "Peter", "age": null } ]
But I would like the contents of the JSON file to look like this:
[ { "name": "Helena", "age": 24 }, { "name": "Peter" } ]
I am using FsPickler.Json v3.2.0 and Newtonsoft.Json v9.0.1.
UPDATE (January 11, 2017) . Using a script in gist related to Stuart, in the answer below I got the following:
let obj = { name = "Peter"; age = None } let stringWriter = new StringWriter() let jsonSerializer = new JsonSerializer() jsonSerializer.Converters.Add(new IdiomaticDuConverter()) jsonSerializer.NullValueHandling <- NullValueHandling.Ignore jsonSerializer.Serialize(stringWriter, obj)
source share