我需要将java对象(称为org)转换为json格式。 对象(DTO)有点复杂,因为它包含同一类的对象列表,而这些对象又可以包含同一类的更多对象(递归构建)。当我将对象传递给gson.toJsonTree方法时,它似乎失败了(没有任何错误),但似乎该方法不喜欢复杂的对象)。如果我将第一个对象的对象列表设置为null,一切正常。我无法修改类,只能修改生成json的方法。
JsonElement jsonUO = null;
jsonUO = gson.toJsonTree(org,OrgDTO.class);
jsonObject.add("ORG", jsonUO)
public class OrgDTO implements Serializable{
private String id;
......
private List sucesores;
public OrgDTO(){
this.sucesores = new ArrayList();
}
.....
}
答案 0 :(得分:0)
对于提问者来说可能有点晚了,但是如果其他人遇到类似的问题,我会分享我的答案:
您需要创建一个执行json序列化的辅助类。它应该实现JsonDeserializer:
public class OrgDTOJsonSerializer implements JsonDeserializer<OrgDTO> {
@Override
public JsonElement serialize(OrgDTO src, Type type, JsonSerializationContext jsc) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("id", src.getId());
/// Build the array of sucesores (whatever it means!)
JsonArray sucesoresArray = new JsonArray();
for (final OrgDTO obj: src.getSucesores()) {
JsonObject succJsonObj = serialize(obj, type, jsc);
sucesoresArray.add(succJsonObj);
}
jsonObject.add("sucesores", sucesoresArray);
return jsonObject;
}
}
然后,在尝试序列化该类型的任何对象之前,您需要在gson中注册它:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(OrgDTO.class, new OrgDTOJsonSerializer());