private Value readValue(Object value) {
		
		if (value == null) {
			return new NullValue();
		} else if (isText(value)) {
			return new TextValue(String.valueOf(value));
		} else if (isCollection(value)) {
			if (value instanceof Set) {
				return readSetValue(value);
			} else {
				return readListValue(value);
			}
		} else if (isArray(value)) {
			return readArrayValue(value);
		} else if (isMap(value)) {
			return readMapValue(value);
		} else {
			return readBean(value);
		}
	}