** Marks a field as a property of a JSON object.@Js facet class JsonProperty {** Name of the JSON property name this field maps to. ** ** Defaults to the field name.const Str? name** The implementation 'Type' to be instantiated should this field reference a mixin or a superclass. ** Used when mapping from JSON objects to Fantom objects. ** ** Defaults to the field type.** ** Note that a property named '_type' in the field's value overrides this 'implType'.const Type? implType** When converting to JSON, any Fantom value that equals this 'defVal' will be treated as if ** it were 'null' and (depending on 'ObjConverter') will *not* exist in the JSON object.** ** When converting from JSON, any 'null' value will be converted to this 'defVal'.** ** This is most useful for saving marker booleans and to avoid saving empty lists and maps.const Obj? defVal** Turns on *Pickle Mode* whereby all non '@Transient' fields are converted, ** regardless of any '@JsonProperty' facets.** ** Data from '@JsonProperty' facets, however, will still honoured if defined.const Bool pickleMode := false}