gpt4 book ai didi

java - 如何使用 GSON 指定序列化?

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:00 26 4
gpt4 key购买 nike

编辑:已解决,当 SO 允许时,将标记我的答案 :)

我正在使用 greenDAO 生成一堆类,当我尝试让 GSON 序列化它们时,它似乎试图序列化 greenDAO 生成的一些字段(我不感兴趣)和崩溃。我希望序列化的对象引用了其他生成的对象和生成对象的列表。

GSON 说它允许由 toString() 方法描述的序列化,我尝试了不同的方法,但是当我检查文件的输出时,它只是显示为 toString() 方法。有人可以告诉我如何从 toString() 方法生成 JSON 对象,或者建议另一种方法来执行自定义序列化。

谢谢 :)

最佳答案

最后想通了 :) 原来我需要为我的每个对象实现一个 JsonSerializer 并手动指定序列化。很乏味!对其他对象的引用需要嵌套,这是我使用 toJsonTree() 方法完成的。这是我最易读的序列化器

private class InfoSerializer implements JsonSerializer<Info>
{
@Override
public JsonElement serialize(Info src, Type typeOfSrc,
JsonSerializationContext context)
{
JsonObject obj = new JsonObject();
obj.addProperty("details", src.getDetails());
obj.addProperty("hostId", src.getHostId());
obj.addProperty("dateCreated", src.getDateCreated().toString());
obj.addProperty("expiryDate", src.getExpiryDate().toString());
obj.add("alternativeInfo", getGsonInstance().toJsonTree(src.getAlternativeInfo()));
obj.add("alternativeTimes", getGsonInstance().toJsonTree(src.getAlternativeTimes()));
return obj;
}
}

注意:getGsonInstance() 是我写的一个返回单例 Gson 对象的方法。

它被调用:

public String infoToJson(Info i)
{
GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter(Info.class, new InfoSerializer());
return gson.create().toJson(i);
}

关于java - 如何使用 GSON 指定序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com