public static Object deserialize(JSONObject jsonObject, Class beanClass) throws NotSerializableException {
		
		Field[] fields = beanClass.getDeclaredFields(); /*loading the field object for the class*/
		Object beanStub = null;
		
		try {
			beanStub = beanClass.newInstance(); /*Creating an empty bean*/
		} catch (InstantiationException | IllegalAccessException e) {
			 throw new NotSerializableException("JSONFactory|deserialize|" + beanClass + "|cannot create" +
					" an object of the fiven class using default constructor!");
		}
		
		/*Iterating over Field objects*/
		for(int i=fields.length-1; i>=0; i--) {
			
			String setterName = JSONFactory.getSetterName(fields[i]); /*Checking the field setter name*/
			Method setter = null;
			
			try {/*Getting the setter Method object*/
				setter = beanClass.getMethod(setterName, fields[i].getType());
			} catch (NoSuchMethodException | SecurityException e) {
				throw new NotSerializableException("JSONFactory|deserialize|" + beanClass +
						"|cannot get the setter method object!");
			}
			
			try {/*Invoking the setter- setting the field to the JSON-given value*/
				Object deserializedObject = jsonObject.get(fields[i].getName());
				
				/*Fixing JSONs abnormal behavior in face of nulls*/
				if(deserializedObject instanceof String && deserializedObject.equals("null")) {
					deserializedObject = null;
				}
				
				/*Final , iterative deserialization using setter invocation*/
				setter.invoke(beanStub, deserializedObject);
			} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | JSONException e) {
				System.out.println(e.getMessage());
				throw new NotSerializableException("JSONFactory|deserialize|" + beanClass +
							"|cannot invoke the setter!");
			}
		}
		return beanStub;
	}