Desserialização do GSON com tipos genéricos e nomes de campos genéricos

Digamos que tenhamos uma estrutura como esta:

JSON:

{
    "body": {
        "cats": [{
            "cat": {
                "id": 1,
                "title": "cat1"
            }
        }, {
            "cat": {
                "id": 2,
                "title": "cat2"
            }
        }]
    }
}

E POJO correspondente:

Response.class

private final Body body;

Body.class

private final Collection<CatWrapper> cats

CatWrapper.class

private final Cat cat

Cat.class

private final int id;
private final String title;

Mas digamos que agora temos a mesma estrutura, mas em vez deCat nós recebemostruck

{
    "body": {
        "trucks": [{
            "truck": {
                "id": 1,
                "engine": "big",
                "wheels" : 12
            }
        }, {
            "truck": {
                "id": 2,
                "engine": "super big",
                "wheels" : 128
            }
        }]
    }
}

Estou usando o GSON (padrãoRetrofit analisador json) emAndroid, considere isso enquanto fornece soluções.

Poderíamos usar genéricos aqui para que a resposta se parecesse com:

private final Body<ListResponse<ItemWrapper<T>> mas não podemos, pois os nomes dos campos são específicos de uma classe.

PERGUNTA, QUESTÃO:

O que posso fazer para serializá-lo automaticamente, sem criar tantas classes padrão? Eu realmente não preciso de aulas separadas comoBodyCat, BodyTruck, BodyAnyOtherClassInThisStructure e estou procurando uma maneira de evitar tê-los.

@EDITAR:

Eu mudei de classe (gato, cachorro -> gato, caminhão) devido à confusão de herança, as classes usadas aqui como exemplo NÃO se estendem

questionAnswers(3)

yourAnswerToTheQuestion