code: @SuppressWarnings("unchecked")
      public static <T extends BaseBo> T fromJson(String json, Class<T> clazz,
              ClassLoader classLoader) {
          if (StringUtils.isBlank(json) || clazz == null) {
              return null;
          }
          try {
              Map<String, Object> data = SerializationUtils.fromJsonString(json, Map.class);
              String boClassName = DPathUtils.getValue(data, FIELD_CLASSNAME, String.class);
              T bo = createObject(boClassName, classLoader, clazz);
              if (bo != null) {
                  bo.fromJson(DPathUtils.getValue(data, FIELD_BODATA, String.class));
                  return bo;
              } else {
                  return null;
              }
          } catch (Exception e) {
              throw e instanceof DeserializationException ? (DeserializationException) e
                      : new DeserializationException(e);
          }
      }
docs: De-serialize a BO from JSON string.
  
  @param json
  the JSON string obtained from {@link #toJson(BaseBo)}
  @param clazz
  @param classLoader
  @return
  @since 0.6.0.3