我有一个对象列表,让我们说:
List<Timestamp>
每个“Timestamp”对象都包含其他对象,特别是它有一个“Tag”对象。
class Timestamp {
String time;
...
Tag tag;
...
}
现在,每个Tag对象都由“Integer”类型的ID标识。
class Tag {
Integer id;
...
}
由于某些原因,我必须使用Gson库将整个时间戳列表的JSON表示写入文件。在某些情况下,我需要每个Tag的ID的十进制表示,而在其他情况下,我需要十六进制格式的ID。
如何在两种格式之间“切换”?考虑编写Timestamp对象的完整列表,我使用以下指令:
ps.println(gson.toJson(timestamps));
我无法在Tag类中添加其他字段/类型/对象,因为JSON表示会有所不同。
答案 0 :(得分:1)
Integer
本身没有格式,只是一个数字
如果您想使用十六进制格式,则必须使用String
代替Integer
。
答案 1 :(得分:1)
我认为这就是答案:
Custom Serializer(来自gson doc示例的变体)
private class TagSerializer implements JsonSerializer<Tag>
{
public JsonElement serialize(Tag src, Type typeOfSrc, JsonSerializationContext context)
{
return new JsonPrimitive(src.toString());
}
}
注册自定义序列化程序
GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter(Tag.class, new TagSerializer());
标记更新
boolean displayIdInHex = false;
public void setDisplayIdInDecimal()
{
displayIdInHex = false;
}
public void setDisplayIdInHex()
{
displayIdInHex = true;
}
public String toString()
{
... stuff ...
if (displayIdInHex)
{
... output id in hex.
}
else
{
... output id in decimal.
}
}
TimeStamp更新 public void setDisplayIdInDecimal() { tag.setDisplayIdInDecimal(); }
public void setDisplayIdInHex()
{
tag.setDisplayIdInHex();
}