Merkwürdiges Verhalten beim Deserialisieren verschachtelter generischer Klassen mit GSON
Ich schreibe eine Klasse, die eine Verbindung zu einem Server herstellt und basierend auf einigen Argumenten eine JSON-Zeichenfolge abruft, die mit GSON in die angegebene Klasse (über Generika) analysiert wird.
Eine abgespeckte Version der verantwortlichen Klasse sieht folgendermaßen aus:
class Executor<T> {
private Response<T> response;
public void execute() {
Type responseType = new TypeToken<Response<T>>() {}.getType();
this.response = new Gson().fromJson(json, responseType);
}
public Response<T> getResponse() { return this.response; }
}
(dasJSON
-Variablesieht aus wie das.)
Die Klasse, in der die Daten nach der De-Serialisierung gespeichert werden, sieht folgendermaßen aus:
class Response<T> {
private List<T> data = null;
public List<T> getData() { return this.data; }
}
Die Klasse, für die die Daten de-serialisiert werden sollen:
public class Language {
public String alias;
public String label;
}
Und der Code, der ausgeführt wird, verwendet die oben genannten Klassen:
Executor<Language> executor = new Executor<Language();
List<Language> languages = executor.execute().getResponse().getData();
System.out.println(languages.get(0).alias); // exception occurs here
Was zur folgenden Ausnahme führt
ClassCastException: com.google.gson.internal.StringMap kann nicht in sunnerberg.skolbibliotek.book.Language umgewandelt werden
Jede Hilfe oder Anregungen sind sehr dankbar!