繁体   English   中英

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

[英]Convert complex Java object to json with gson.toJsonTree

我需要将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();
    }
    .....
}

对于发问者来说可能有点晚了,但是如果其他人遇到类似的问题,我也分享我的答案:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM