2016-07-26 2 views
0

После просмотра вопросов, связанных с Stackoverflow, я не смог найти решение, которое бы устранило эту проблему.java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap нельзя отнести к модели

Я пытаюсь использовать GSON и реализовали общий метод, как это:

public <T> List<T> deserializeList(String json) { 
    Gson gson = new Gson(); 
    Type type = (new TypeToken<List<T>>() {}).getType(); 
    return gson.fromJson(json, type); 
} 

вызов этого метода осуществляется с помощью этого:

parser.<Quote>deserializeList(result) 

Однако результат, который я получаю это:

enter image description here

И когда я пытаюсь получить доступ к объекту, я получаю эту ошибку:

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to model.Quote 

Строка JSON является:

[ 
    { 
     "id": 269861, 
     "quote": "People living deeply have no fear of death.", 
     "author": "Anais Nin", 
     "genre": "life", 
     "tag": null, 
     "createdAt": "2016-04-16T13:13:36.928Z", 
     "updatedAt": "2016-04-16T13:13:36.928Z" 
    } 
] 
+0

Я не думаю, что так вы должны назвать этот метод с параметром типа –

+0

@ cricket_007 с или без него не имеет значения - parser.deserializeList (result) – codebased

+0

Вот что я думал. Итак, что такое 'T' в определении класса? Вторичный вопрос, можете ли вы использовать «Дооснащение»? –

ответ

1

Я думаю, вы могли бы написать метод, как так, чтобы явно предоставить Type

public <T> List<T> deserializeList(String json, Type type) { 
    Gson gson = new Gson(); 
    return gson.fromJson(json, type); 
} 

Хотя, проходя вокруг (new TypeToken<List<Model>>() {}).getType(); выглядит немного грязно.

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

Смежные вопросы