code: function deserialize(Clazz, json) {
      /**
       * As it is a recursive function, ignore any arguments that are unset
       */
      if (hasAnyNullOrUndefined(Clazz, json)) {
          return void 0;
      }
      /**
       * Prevent non-json continue
       */
      if (!utils_1.isTargetType(json, 'object')) {
          return void 0;
      }
      /**
       * init root class to contain json
       */
      var instance = new Clazz();
      Object.keys(instance).forEach(function (key) {
          /**
           * get decoratorMetaData, structure: { name?:string, clazz?:{ new():T } }
           */
          var decoratorMetaData = getJsonProperty(instance, key);
          /**
           * pass value to instance
           */
          if (decoratorMetaData && decoratorMetaData.customConverter) {
              instance[key] = decoratorMetaData.customConverter.fromJson(json[decoratorMetaData.name || key]);
          }
          else {
              instance[key] = decoratorMetaData ? mapFromJson(decoratorMetaData, instance, json, key) : json[key];
          }
      });
      return instance;
  }
docs: deserialize
  
  @function
  @param {{new():T}} clazz, class type which is going to initialize and hold a mapping json
  @param {Object} json, input json object which to be mapped
  
  @return {T} return mapped object