Generische Typen mit GSON deserialisieren
Ich habe einige Probleme mit der Implementierung der Json-Deserialisierung in meiner Android-Anwendung (mit der Gson-Bibliothek)
Ich habe Klasse wie diese gemacht
public class MyJson<T>{
public List<T> posts;
}
Und der Aufruf zur Deserialisierung lautet:
public class JsonDownloader<T> extends AsyncTask<Void, Void, MyJson<T>> {
...
protected MyJson<T> doInBackground(Void... params) {
...
Reader reader = new InputStreamReader(content);
GsonBuilder gson = new GsonBuilder();
Type collectionType = new TypeToken<MyJson<T>>() {}.getType();
result = gson.create().fromJson(reader, collectionType);
...
}
}
Das Problem ist, dass die Liste result.posts nach dem Aufruf ein Array von LinkedTreeMap-Objekten enthält (mit korrekten Werten, sodass das Problem die Deserialisierung ist) anstelle von MyJson Objects. Wenn ich MyObject anstelle von T verwende, läuft alles einwandfrei und MyObject ist korrekt.
Gibt es also eine Möglichkeit, einen Deserialisierungsaufruf zu implementieren, ohne einen benutzerdefinierten Deserialisierer zu erstellen?