JsonAware jsonObjectMapping(Object src) {

		if (src == null) {
			return serializeNulls ? JsonNull.getInstance() : null;
		}

		JsonObject target = new JsonObject();

		if (isMapJsonObject(src)) {

			for (Map.Entry entry : (Set<Map.Entry>) ((Map) src).entrySet()) {
				Object value = entry.getValue();

				JsonAware valueElement;
				if (value == null) {
					valueElement = JsonNull.getInstance();
				} else {
					valueElement = typeMapping(value);
				}
				target.add(String.valueOf(entry.getKey()), valueElement);
			}

			return target;
		}

		Field[] fields = Reflector.getFields(src);

		for (Field field : fields) {
			Object value = null;
			String property = field.getName();

			field.getType();

			try {
				value = Reflector.getFieldValue(field, src, true);
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}

			target.add(property, typeMapping(value));
		}

		return target;

	}