objects can support "objectAsDictionary" to export themselves to JSON

only export the required fields, and internal data can be skipped - all
transformation/naming is up to you
updates to save and recursiveSave