我正在使用 GSON 将 JSON 字符串反序列化为包含具有通用键/值的嵌套 Map 的 JAVA 对象。
从我的调试中我看到 GSON 将第一个泛型类型转换为正确的对象。但第二个未转换,因此充当字符串。
class A {
public B<C_Enum> b = new B<C_Enum>();
}
class B<T> {
private Map<T, T> map = new HashMap<T, T>();
}
enum C_Enum {
VAL1, VAL2;
}
main() {
String json = "{\"b\": {\"map\": {\"NOT_VALID\": \"NOT_VALID\"}}}";
GsonBuilder builder = new GsonBuilder();
Gson customDeserializer = builder.create();
A a = customDeserializer.fromJson(json, A.class);
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,映射使用 null 键填充,因为 NOT_VALID 不是有效的 C_Enum 值,并且映射的值使用 NOT_VALID 填充。
注意:我的真实代码有点不同,但问题是相同的
我遇到同样的问题
Map<SOME_ENUM, T>map;
// gson will not use @SerializedName in the SOME_ENUM
String badJson = new Gson().toJson(map)
Run Code Online (Sandbox Code Playgroud)
将其更改为
Map<SOME_ENUM, T>map;
// gson is good
String goodJson = new GsonBuilder().enableComplexMapKeySerialization().create().toJson(map)
Run Code Online (Sandbox Code Playgroud)
链接到gson/问题
| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |