使用 Gson 抛出 java.lang.ClassCastException 解析 HashMap<String, ArrayList<User>>

Parse HashMap<String, ArrayList<User>> with Gson throws java.lang.ClassCastException

我有一个 Json 这样的:

{
    "a": [
        {"name": "a"}
    ],
    "b": [
        {"name": "b"}
    ]
} 

我使用 Retrofit 转换为 java 对象,如下所示:

public interface TheService {
    @GET("data")
    Call<HashMap<String, ArrayList<User>>> getUsers();
}

工作正常。但是当我缓存我的 json 字符串并使用 Gson 手动解析它时:

Gson gson = new Gson();
HashMap<String, ArrayList<User>> map = gson.fromJson(jsonString, HashMap.class);

它抛出错误:java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap cannot be cast to xxx.User

那么如何使用 Gson 将 jsonString 转换为 HashMap<String, ArrayList<User>> 对象?

我在这里找到了解决方案:(详细解释)

使用 TypeToken

Type type = new TypeToken<HashMap<String, ArrayList<User>>>() {}.getType();
HashMap<String, ArrayList<User>> map = gson.fromJson(jsonString, type);