Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GSON正在正确序列化枚举,但将其反序列化为字符串_Java_Serialization_Enums_Gson_Deserialization - Fatal编程技术网

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

Java GSON正在正确序列化枚举,但将其反序列化为字符串,java,serialization,enums,gson,deserialization,Java,Serialization,Enums,Gson,Deserialization,上述代码的输出: @SerializedName("w") WOODCUTTING("Woodcutting"), @SerializedName("m") MINING("Mining"), @SerializedName("f") FISHING("Fishing"), 如您所见,它首先正确地构建Gson,但随后似乎将其反序列化为字符串,而不是枚举。我有点搞不懂这里发生了什么-默认情况下Gson不支持枚举吗 我还尝试注册了一个TypeAdapterFactory,用于序列化/反序列化枚举。

上述代码的输出:

@SerializedName("w") WOODCUTTING("Woodcutting"),
@SerializedName("m") MINING("Mining"),
@SerializedName("f") FISHING("Fishing"),
如您所见,它首先正确地构建Gson,但随后似乎将其反序列化为字符串,而不是枚举。我有点搞不懂这里发生了什么-默认情况下Gson不支持枚举吗


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

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

[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
List items=new Gson().fromJson(json,new TypeToken(){}.getType())

尝试创建一个java bean并反序列化到其中。否则这就行不通了,gson无法理解字符串是您的枚举。对不起,我对javabean这个术语不太熟悉。这是否意味着我创建了一个包含1个枚举类型变量的类,并反序列化为该类?Gson的JavaDoc说:“Gson为枚举、映射、URL、URI、区域设置、日期、BigDecimal和BigInteger类提供默认序列化和反序列化。如果您希望更改默认表示形式,可以通过GsonBuilder.registerTypeAdapter(类型、对象)注册类型适配器来实现。”那我为什么要多走一步呢?回答得很好。为我工作,非常感谢!顺便问一下,有什么地方可以让我读到这些东西吗?我在文件上找不到那种信息。。这种语法是非常不寻常的,我不认为我会想出我自己!
[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
List<Skill> items = new Gson().<List<Skill>>fromJson(json, new TypeToken<List<Skill>>(){}.getType())