最后想通了 :) 原来我需要为我的每个对象实现一个 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);
}