GSON-Deserialisierung mit generischen Typen und generischen Feldnamen

Nehmen wir an, wir haben eine Struktur wie diese:

JSON:

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

Und entsprechendes POJO:

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;

Aber lassen Sie uns jetzt sagen, wir haben die gleiche Struktur, aber anstelle vonCat wir erhaltentruck

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

Ich benutze GSON (defaultRetrofit json parser) aufAndroid, bedenke dies, während du Lösungen gibst.

Wir könnten hier Generika verwenden, sodass die Antwort wie folgt aussehen würde:

private final Body<ListResponse<ItemWrapper<T>> können wir aber nicht, da die Feldnamen spezifisch für eine Klasse sind.

FRAGE

Was kann ich tun, um es automatisch zu serialisieren, ohne so viele Boilerplate-Klassen zu erstellen? Ich brauche keine separaten Klassen wieBodyCat, BodyTruck, BodyAnyOtherClassInThisStructure und ich suche nach einer Möglichkeit, sie zu vermeiden.

@BEARBEITEN

Ich habe die Klassen (Katze, Hund -> Katze, LKW) aufgrund von Vererbungsverwirrung geändert. Die hier als Beispiel verwendeten Klassen erweitern sich NICHT.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage