Ich habe einige Probleme beim Parsen eines generischen ArrayList
mit GSON. Ich habe bestätigt, dass diese Methode funktioniert, wenn der spezifische Typ für die ArrayList
angegeben ist (ohne Generics), aber ich möchte eine Methode schreiben, die mit Generics funktioniert.Parsing generische ArrayList mit GSON
Basierend auf anderen Stapelüberlauf Fragen sollte dies funktionieren, und ich kann nicht wirklich verstehen, warum es nicht. Es ist nicht möglich, die ArrayList
zu parsen, so dass alles, was ich bekomme, eine Sammlung von LinkedTreeMap
ist. Die generische Methode ist unter:
public <T> List<T> listFromJson(@NonNull Class<T> classOfT) throws JsonSyntaxException {
if (data == null)
return null;
Gson gsonParser = new Gson();
TypeToken<ArrayList<T>> token = new TypeToken<ArrayList<T>>() {};
return gsonParser.fromJson(gsonParser.toJson(data), token.getType());
}
Edit:data
ist nur ein Object
, die die json enthält analysiert werden. Die Anweisung gsonParser.toJson(data)
funktioniert gut.
Und ich rufe es so, wo MyClass
könnte jede benutzerdefinierte Java-Klasse sein, die ich geschrieben habe:
List<MyClass> resList = result.listFromJson(MyClass.class);
Jede Hilfe würde geschätzt, ich weiß nicht wirklich, was das Problem ist aber es ist sicher mit den Vorlagen verwandt, da eine nicht-generische Methode die Arbeit erledigen würde.
Edit2: Nur um zu klären, ich bin auch auch die nicht Generika Methode, die funktioniert:
public List<MyClass> listFromJson() throws JsonSyntaxException {
Type listType = new TypeToken<ArrayList<MyClass>>(){}.getType();
Gson gsonParser = new Gson();
return gsonParser.fromJson(gsonParser.toJson(data), listType);
}
Hallo, Entschuldigung für die lange Zeit ohne zu beantworten, aber ich bin in diesen Tagen sehr beschäftigt. Ich benutze Gson Version 1.19, verwaltet von Maven. Ich muss diese Version weiterhin verwenden. Bitte versuchen Sie eine benutzerdefinierte Klasse mit einigen Attributen zu definieren und testen Sie die Methode damit, es funktioniert nicht für mich. Dieser Beitrag war ursprünglich für Android gedacht, aber die Methode in Java getestet und alles, was ich bekomme, ist eine LinkedHashMap als Ergebnis des Parsing-Prozesses ... kann nicht herausfinden, warum –
JorgeGRC