【问题标题】:Convert complex Java object to json with gson.toJsonTree使用 gson.toJsonTree 将复杂的 Java 对象转换为 json
【发布时间】:2015-09-26 16:15:57
【问题描述】:

我需要将一个 java 对象(称为 org)转换为 json 格式。 对象 (DTO) 有点复杂,因为它包含同一类的对象列表,而该列表又可以包含同一类的更多对象(递归构建)。当我将对象传递给 gson.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();
    }
    .....
}

【问题讨论】:

  • 那么它创建了什么json?

标签: java json object recursion gson


【解决方案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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多