最後にそれを理解しました:)オブジェクトごとに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);
}