code: public T fromJson(JSONObject json) {
          T object = null;
  
          try {
              object = clazz.newInstance();
              ((Model) object).setContext(context);
  
              Field[] fields = clazz.getDeclaredFields();
  
              try {
                  for (Field field : fields) {
  
                      if (!field.isAnnotationPresent(ModelField.class)) {
                          continue;
                      }
  
                      String name = field.getName();
                      boolean was = field.isAccessible();
  
                      field.setAccessible(true);
  
                      switch (toFieldEnum(field)) {
                          case INT:
                              field.setInt(object, json.optInt(name, 0));
                              break;
                          case LONG:
                              field.setLong(object, json.optLong(name, 0));
                              break;
                          case FLOAT:
                              field.setFloat(object, json.optLong(name, 0));
                              break;
                          case DOUBLE:
                              field.setDouble(object, json.optDouble(name, 0));
                              break;
                          case STRING:
                              field.set(object, json.opt(name));
                              break;
                          case BOOLEAN:
                              field.setBoolean(object, json.optBoolean(name, false));
                              break;
                          case LIST:
                              JSONArray list = json.optJSONArray(name);
  
                              try {
                                  if (list != null) {
                                      List<String> stringList = new ArrayList<>();
  
                                      for (int i = 0; i < list.length(); i++) {
                                          stringList.add(list.getString(i));
                                      }
  
                                      field.set(object, stringList);
                                  }
                              } catch (JSONException e) {
                                  // TODO.
                              }
  
                              break;
                      }
  
                      field.setAccessible(was);
                  }
              } catch (IllegalAccessException e) {
                  e.printStackTrace();
              }
  
          } catch (IllegalAccessException | InstantiationException e) {
              e.printStackTrace();
          }
  
          return object;
      }
docs: Analyzes the entire json object and creates a brand-new...
  instance from its representation.
  
  TODO: Figure out how to make this accesible without...
  creating a dummy instance.
  
  @param json The JSONObject representation of the object.
  @return The object T if able to convert and null otherwise.