Comportamiento extraño al deserializar clases genéricas anidadas con GSON
Estoy escribiendo una clase que se conectará a un servidor y, en base a algunos argumentos, recupero una cadena json que se analizará con GSON a la clase especificada (a través de genéricos).
Una versión reducida de la clase a cargo se ve así:
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; }
}
(laJSON
-variableSe ve como esto.)
La clase que almacena los datos una vez des-serializados se ve así:
class Response<T> {
private List<T> data = null;
public List<T> getData() { return this.data; }
}
La clase a la que los datos intentan ser des-serializados para:
public class Language {
public String alias;
public String label;
}
Y el código que se ejecuta utiliza las clases anteriores:
Executor<Language> executor = new Executor<Language();
List<Language> languages = executor.execute().getResponse().getData();
System.out.println(languages.get(0).alias); // exception occurs here
Lo que resulta en la siguiente excepción
ClassCastException: com.google.gson.internal.StringMap no se puede convertir en sunnerberg.skolbibliotek.book.Language
¡Alguna ayuda o sugerencia será muy apreciada!