GSON - десериализация коллекции дженериков Java - PullRequest
0 голосов
/ 27 марта 2011


Я пытаюсь десериализовать массив из БД безуспешно.
Это способ, которым я помещаю свои объекты:

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 );

, и это способ, которым я отлаживаю объект
А теперь- исключение

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.

1 Ответ

0 голосов
/ 02 апреля 2011

Gson ожидает список объектов Json, таких как: [{obj1}, {obj2}, ... , {objN}]

Я не уверен из кода, который вы разместили здесь, каковы были ваши намерения, но мне кажется, что вы упаковываете список с родительским объектом.

В том случае, если вы этого хотите, вам нужно создать собственный десериализатор .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...