1

我将对象列表转换为 json 字符串,然后返回到对象列表,如下所示:

List<Work> list = new ArrayList<Work>();
Work w1 = new Work();
Work w2 = new Work();
list.add(w1);
list.add(w2);

String str = GsonUtils.getJsonString(list);

Type listType = new TypeToken<ArrayList<Work>>() {
}.getType();
List<Work> list1 = new Gson().fromJson(str, listType);

这完全正常并返回列表List<Work>

现在我通过提取如下方法来做同样的事情:

List<Work> list = new ArrayList<Work>();
Work w1 = new Work();
Work w2 = new Work();
list.add(w1);
list.add(w2);

String str = GsonUtils.getJsonString(list);

Type listType = new TypeToken<ArrayList<Work>>() {
}.getType();
List<Work> list1 = getListFromJSON(str, Work.class);

其中方法定义如下:

public <T> List<T> getListFromJSON(String str, Class<T> type) {
    Type listType = new TypeToken<ArrayList<T>>() {
    }.getType();
    List<T> list = new Gson().fromJson(str, listType);
    return list;
}

这次它导致了一个错误:

Exception in thread "main" java.lang.ClassCastException: com.google.gson.internal.StringMap cannot be cast to com.restfb.types.User$Work
    at expt.ExptGsonList.main(ExptGsonList.java:45)

请帮助我知道我哪里出错了,我怎样才能让这个工作使用方法?

4

1 回答 1

0

将方法签名更改为

public <T> List<T> getListFromJSON(String str, Type type)

并通过 listType

于 2013-08-28T05:44:39.963 回答