# File lib/rgen/instantiator/json_instantiator.rb, line 61
  def createObject(hash)
    className = hash["_class"]
    # hashes without a _class key are returned as is

    return hash unless className
    if @classes[className]
      clazz = @classes[className].instanceClass
    elsif @short_class_names && @classes_flat[className]
      clazz = @classes_flat[className].instanceClass
    else 
      raise "class not found: #{className}"
    end
    hash.delete("_class")
    @ignore_keys.each do |k|
      hash.delete(k)
    end
    urefs = []
    hash.keys.each do |k|
      f = eFeature(k, clazz)
      hash[k] = [hash[k]] if f.many && !hash[k].is_a?(Array)
      if f.is_a?(RGen::ECore::EReference) && !f.containment
        if f.many
          idents = hash[k]
          hash[k] = idents.collect do |i|
            proxy = RGen::MetamodelBuilder::MMProxy.new(i)
            urefs << ReferenceResolver::UnresolvedReference.new(nil, k, proxy)
            proxy
          end
        else
          ident = hash[k]
          ident = ident.first if ident.is_a?(Array)
          proxy = RGen::MetamodelBuilder::MMProxy.new(ident)
          hash[k] = proxy
          urefs << ReferenceResolver::UnresolvedReference.new(nil, k, proxy)
        end
      elsif f.eType.is_a?(RGen::ECore::EEnum)
        hash[k] = hash[k].to_sym
      elsif f.eType.instanceClassName == "Float"
        hash[k] = hash[k].to_f
      end
    end  
    obj = @env.new(clazz, hash)
    urefs.each do |r|
      r.element = obj
      @unresolvedReferences << r 
    end
    obj
  end