code: function JsonProperty(metadata) {
      var decoratorMetaData;
      if (utils_1.isTargetType(metadata, 'string')) {
          decoratorMetaData = new DecoratorMetaData(metadata);
      }
      else if (utils_1.isTargetType(metadata, 'object')) {
          decoratorMetaData = metadata;
      }
      else {
          throw new Error('index.ts: meta data in Json property is undefined. meta data: ' + metadata);
      }
      return Reflect.metadata(JSON_META_DATA_KEY, decoratorMetaData);
  }
docs: JsonProperty
  
  @function
  @property {IDecoratorMetaData<T>|string} metadata, encapsulate it to DecoratorMetaData for standard use
  @return {(target:Object, targetKey:string | symbol)=> void} decorator function