【问题标题】:GSON - Deserialize java generics collectionGSON - 反序列化 java 泛型集合
【发布时间】:2013-03-27 04:44:23
【问题描述】:


我正在尝试从数据库中反序列化一个数组列表,但没有成功。
这是我放置对象的方式:

for (int i = 0; i < dealsList.size(); i++) {
    ServerServicesInternalWrapper.reportDeal(Json.toWrap(dealsList.get(i)));
}

在哪里

public static <T> String toWrap(T t) {
    JsonWrapperWithType wrapper = 
        new JsonWrapperWithType(t.getClass(),gson.toJson(t));
    return to(wrapper);
}

这是我选择的方式

return (List<DealBean>)session.createCriteria(DealBean.class).add(Restrictions.eq("portfolio", portfolio)).list();

然后我使用

将它转换为字符串
JsonWrapperWithType wrapper = 
    new JsonWrapperWithType(t.getClass(), gson.toJson(t));
return gson.toJson(wrapper );

这就是我对对象进行 de-gson 的方式
现在 - 例外

Type listType = new TypeToken<List<DealBean>>(){}.getType();

List<DealBean> dealsForPortfolio =
    (List<DealBean>)gson.fromJson(dealsForPortfolioString,type);


com.google.gson.JsonParseException: The JsonDeserializer 
com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@1f899e9 failed to deserialized 
json object {"type":"java.util.ArrayList","content":"[{\"ID\":5,\"tradable\":
...
Caused by: java.lang.IllegalStateException: This is not a JSON Array.

【问题讨论】:

  • 这仍然是未解决的问题吗?如果是这样,dealsForPortfolioString 的价值是多少?看起来它不是代码预期结构的 JSON。

标签: gson


【解决方案1】:

Gson 需要一个 Json 对象列表,例如:[{obj1}, {obj2}, ... , {objN}]

我不确定您在此处发布的代码的意图是什么,但在我看来,您正在用父对象包装一个列表。

如果你想要这样,你需要自己创建deserializer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多