使用 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);
我有一个 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);