Я использую Java Reflection API для получения объектов, так как я не знаю тип объекта в явном виде и у меня нет доступа к классам.
if (object != null) {
HashMap<String, Object> requestDetails = new HashMap<>();
for (Field field : object.getClass().getDeclaredFields()) {
field.setAccessible(true);
Object value = null;
try {
value = field.get(object);
} catch (IllegalAccessException e) {
log.error("Could not found the class", e);
}
if (value != null) {
requestDetails.put(field.getName(), value);
}
}
return requestDetails;
}
return object;
Затем я хотел преобразовать его в JSON объект с помощью Gson.
for (Map.Entry<String, Object> authzRequestDetail : authzRequestDetails.entrySet()) {
final Gson gson = new GsonBuilder()
.registerTypeAdapterFactory(getStaticTypeAdapterFactory())
.create();
JsonElement element = gson.toJsonTree(authzRequestDetail.getValue());
valueObject.add(authzRequestDetail.getKey(), element);
}
return valueObject;
Так как я не знаю тип класса, я получаю ошибку,
Attempted to serialize java.lang.Class: org.wso2.carbon.identity.oauth.endpoint.authz.OAuth2AuthzEndpoint. Forgot to register a type adapter?
Возможно ли преобразовать его в JSON объект, не зная класса из-за того, что у меня нет доступа к классам в Downcast и я передаю его, как (скажем, класс доступен ClassA)
JsonElement element = gson.toJsonTree((ClassA)authzRequestDetail.getValue(),ClassA.class);
обратите внимание, что эти объекты содержат несколько типов.