protected Object parseMap( JSONObject jsonObj, Class<?> mapClazz, Type genericType, ValidationException validationException) throws IntrospectionException, IllegalAccessException, InstantiationException, JSONException, IllegalArgumentException, InvocationTargetException, ParseException { if (mapClazz == null) { throw new AJAXParserException("No specific class type."); } if (jsonObj == null) { return null; } if (genericType == null) { throw new AJAXParserException("No specific generic type for map " + mapClazz); } Map<Object, Object> mapInstance; if (java.util.HashMap.class.equals(mapClazz)) { mapInstance = new java.util.HashMap<Object, Object>(jsonObj.size()); } else if (java.util.LinkedHashMap.class.equals(mapClazz)) { mapInstance = new java.util.LinkedHashMap<Object, Object>(jsonObj.size()); } else if (java.util.TreeMap.class.equals(mapClazz)) { mapInstance = new java.util.TreeMap<Object, Object>(); } else if (java.util.Hashtable.class.equals(mapClazz)) { mapInstance = new java.util.Hashtable<Object, Object>(jsonObj.size()); } else { mapInstance = new java.util.LinkedHashMap<Object, Object>(jsonObj.size()); } Type[] actualTypes = getActualTypes(genericType); Class<?> keyClazz = actualTypes[0] instanceof Class ? (Class<?>) actualTypes[0] : (Class<?>) ((ParameterizedType) actualTypes[0]).getRawType(); Class<?> valueClazz = actualTypes[1] instanceof Class ? (Class<?>) actualTypes[1] : (Class<?>) ((ParameterizedType) actualTypes[1]).getRawType(); for (Object jsonObjKey : jsonObj.keySet()) { String jsonKey = jsonObjKey.toString(); Object jsonValue = jsonObj.get(jsonKey); String jsonStrValue = jsonValue == null ? null : jsonValue.toString(); Object keyObj = dispatcher(jsonKey, keyClazz, null, validationException); Object valueObj = dispatcher(jsonStrValue, valueClazz, null, validationException); mapInstance.put(keyObj, valueObj); } return mapInstance; }