有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用gson将复杂的Java对象转换为json。toJsonTree

我需要将java对象(称为org)转换为json格式。 对象(DTO)有点复杂,因为它包含同一类的对象列表,而这些对象又可以包含同一类的更多对象(递归构建)。当我把物体传给格森时。toJsonTree方法似乎失败了(没有任何错误),但该方法似乎不喜欢复杂对象)。如果我将第一个对象的对象列表设置为空,那么一切正常。我不能修改这个类,只能修改生成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();
    }
    .....
}

共 (1) 个答案

  1. # 1 楼答案

    对于提问者来说可能有点晚了,但我会分享我的答案,以防其他人面临类似问题:

    您需要创建一个执行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());