** 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