【问题标题】:conversion between list of objects and Gson string对象列表和 Gson 字符串之间的转换
【发布时间】:2013-08-31 01:41:15
【问题描述】:

我将对象列表转换为 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&lt;Work&gt;

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

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)

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

【问题讨论】:

    标签: java json list gson


    【解决方案1】:

    将方法签名改为

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

    并传递 listType

    【讨论】:

    • 我按你说的改了,然后List&lt;T&gt; list = new Gson().fromJson(str, type);。这导致错误:Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
    • 将返回值也改为 List 而不是 List
    • 我做不到。我正在写一个方法让它适用于任何类对象。
    • 我基本上指向您作为参数传递但未使用的 Class 类型。另外,返回类型不应该是 而不是 List
    • &lt;T&gt; List&lt;T&gt; 不是返回类型。返回类型是List&lt;T&gt;&lt;T&gt; 只是方法的类型参数。
    猜你喜欢
    • 2018-05-29
    • 2014-10-20
    • 2021-10-04
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2015-02-25
    相关资源
    最近更新 更多