簡體   English   中英

GSON 沒有使用通用鍵/值反序列化正確嵌套的 map

[英]GSON not de-serializing properly nested map with generic key/value

我正在使用 GSON 將 JSON 字符串反序列化為 JAVA object,其中包含帶有通用鍵/值的嵌套 Map。
從我的調試中,我看到 GSON 將第一個泛型類型轉換為正確的 object。但第二個未轉換,因此充當字符串。

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);
}

在此示例中,map 填充了 null 鍵,因為 NOT_VALID 不是有效的 C_Enum 值,而 map 的值填充了 NOT_VALID。
注意:我的真實代碼有點不同,但問題是一樣的

我遇到同樣的問題

Map<SOME_ENUM, T>map;
// gson will not use @SerializedName in the SOME_ENUM
String badJson = new Gson().toJson(map)

改成

Map<SOME_ENUM, T>map;
// gson is good
String goodJson = new GsonBuilder().enableComplexMapKeySerialization().create().toJson(map)

鏈接到gson/issue

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM