gpt4 book ai didi

java - 如何使用 Gson 以十六进制表示整数?

转载 作者:搜寻专家 更新时间:2023-11-01 03:25:38 25 4
gpt4 key购买 nike

我有一个对象列表,比方说:

List<Timestamp>

每个“Timestamp”对象都包含其他对象,特别是它有一个“Tag”对象。

class Timestamp {
String time;
...
Tag tag;
...
}

现在,每个 Tag 对象都由“整数”类型的 ID 标识。

class Tag {
Integer id;
...
}

由于一些原因,我必须使用 Gson 库将整个时间戳列表的 JSON 表示形式写入一个文件。在某些情况下,我需要每个标签 ID 的十进制表示,而在其他情况下,我需要十六进制格式的 ID。

如何在两种格式之间“切换”?考虑到要编写整个 Timestamp 对象列表,我使用以下指令:

ps.println(gson.toJson(timestamps));

而且我无法在 Tag 类中添加其他字段/类型/对象,因为 JSON 表示会有所不同。

最佳答案

我认为这就是答案:

  1. 为 Tag 类编写自定义 gson 序列化程序。
  2. 在 Tag 中添加一个标志变量,指示何时以十六进制输出 id,何时以十进制输出 id。
  3. 在关注新添加的标志的 Tag 类上创建一个 toString() 方法。

自定义序列化程序(来自 gson 文档示例的变体)

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.
}
}

时间戳更新 公共(public)无效 setDisplayIdInDecimal() { tag.setDisplayIdInDecimal();

public void setDisplayIdInHex()
{
tag.setDisplayIdInHex();
}

关于java - 如何使用 Gson 以十六进制表示整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14631387/

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