 	}
 	
 	fileprivate func setupCommons() {
+		self.commons.valueBlock = { (instance, value, key) -> AnyObject? in
+			guard let dict = value as? [String: AnyObject] else { return nil }
+			return dict[key] as AnyObject
+		}
+		
 		self.commons.primitiveValueBlock = { (instance, value, key) -> Void in
 			instance.setValue(value, forKey: key)
 		}

		return type.init()
	}
	
	fileprivate func populateArray(forKey key: String, intoInstance instance: inout AnyObject, withTypeInfo typeInfo: TypeInfo, withJsonArray jsonArray: [AnyObject]) {
		var array = [AnyObject]()
		for item in jsonArray {
			if commons.isPrimitiveType(typeInfo.typeName) {
				array.append(item)
			} else {
				var inst: AnyObject = self.getInstance(forType: NSClassFromString(typeInfo.typeName) as! NSObject.Type)
				commons.populate(instance: &inst, withJsonObject: item as! [String : AnyObject])
				array.append(inst)
			}
		}
		instance.setValue(array, forKey: key)
	}
	
	fileprivate func populateObject(forKey key: String, intoInstance instance: AnyObject, withTypeInfo typeInfo: TypeInfo, withJsonObject jsonObject: [String: AnyObject]) {
		var propertyInstance = self.getInstance(forType: typeInfo.type as! NSObject.Type)
		commons.populate(instance: &propertyInstance, withJsonObject: jsonObject)
		instance.setValue(propertyInstance, forKey: key)
	}
}

		guard let data = string.data(using: .utf8) else { return nil }
		guard let jsonObject = try! JSONSerialization.jsonObject(with: data, options: options) as? [String: AnyObject] else { return nil }
	
		self.setupCommons()
		
		let instance: AnyObject = (getInstance() as T) as AnyObject
		self.commons.populate(instance: instance, withObject: jsonObject as AnyObject, withConfig: config)
		
		self.unsetupCommons()
		
