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!

Respuestas a la pregunta(3)

Su respuesta a la pregunta