gpt4 book ai didi

java - GSON 正确序列化枚举,但将其反序列化为字符串

转载 作者:行者123 更新时间:2023-11-30 02:44:01 25 4
gpt4 key购买 nike

    HashSet<Skill> tmp = new HashSet<Skill>();
tmp.add(Skill.WOODCUTTING);
tmp.add(Skill.FIREMAKING);
String j;
System.out.println(j = new GsonBuilder().create().toJson(tmp));
System.out.println(new GsonBuilder().create().fromJson(j, HashSet.class));
for (Object e : new GsonBuilder().create().fromJson(j, HashSet.class)) {
System.out.println(e.getClass());
System.out.println(e.toString());
}

技能是一个枚举,定义如下:

@SerializedName("w") WOODCUTTING("Woodcutting"),
@SerializedName("m") MINING("Mining"),
@SerializedName("f") FISHING("Fishing"),

上面代码的输出:

[11:04:18 INFO]: ["fir","w"]
[11:04:18 INFO]: [w, fir]
[11:04:18 INFO]: class java.lang.String
[11:04:18 INFO]: false
[11:04:18 INFO]: w
[11:04:18 INFO]: class java.lang.String
[11:04:18 INFO]: false
[11:04:18 INFO]: fir

如您所见,它首先正确构建 Gson,但随后似乎将其反序列化为字符串而不是枚举。我对这里发生的事情有点困惑 - Gson 默认不支持枚举吗?

我还尝试注册一个用于序列化/反序列化枚举的 TypeAdapterFactory。尽管它创建的 TypeAdapter 的 write() 方法被调用,但 read() 方法永远不会被调用。

最佳答案

以下是使用 Gson 进行枚举反序列化的正确方法。

List<Skill> items = new Gson().<List<Skill>>fromJson(json, new TypeToken<List<Skill>>(){}.getType())

关于java - GSON 正确序列化枚举,但将其反序列化为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40772435/

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