首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GSON正在正确地序列化enum,但将其反序列化为字符串。

GSON正在正确地序列化enum,但将其反序列化为字符串。
EN

Stack Overflow用户
提问于 2016-11-23 19:11:05
回答 1查看 647关注 0票数 1
代码语言:javascript
复制
    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());
    }

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

代码语言:javascript
复制
@SerializedName("w") WOODCUTTING("Woodcutting"),
@SerializedName("m") MINING("Mining"),
@SerializedName("f") FISHING("Fishing"),

上述代码的输出:

代码语言:javascript
复制
[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。尽管它创建的TypeAdapters的write()方法被调用,但read()方法从未调用过。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-23 19:21:34

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

代码语言:javascript
复制
List<Skill> items = new Gson().<List<Skill>>fromJson(json, new TypeToken<List<Skill>>(){}.getType())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40772435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档