对象列表和Gson字符串之间的转换

时间:2013-08-28 05:41:20

标签: java json list gson

我正在将对象列表转换为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);

其中method的定义如下:

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)

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

1 个答案:

答案 0 :(得分:0)

将方法签名更改为

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

并传递listType