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.