Android: Versucht zu serialisieren ... Vergessen registrieren eine Art adapter?"
Wie konvertiert HashMap zu JSON mit Gson.
class ClassData {
public String jsonString;
public Class classType;
}
HashMap<String, ClassData> map = new HashMap<>();
void convert(){
new Gson().toJson(map); //throws
}
Ich bin immer die nächste Ausnahme
Versucht zu serialisieren java.lang.Class: java.lang.String. Vergessen
registrieren Sie eine Art adapter?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie implementieren müssen, um Ihre eigene benutzerdefinierte serializer für ClassData, und dann zu registrieren, um Ihre Gson-generator.
Ausgabe: {"key":"key"}
Lesen Sie mehr: https://sites.google.com/site/gson/gson-user-guide#TOC-Writing-a-Serializer
Mein Ansatz funktioniert für Gson 2.3.1 mit Java 1.7, können nicht garantieren, es wird funktionieren mit Android.
Das problem liegt in der variable
classType
, da Gson kann nicht verarbeiten, die ArtClass
wie es ist. So erzeugen wir ein TypeAdapter für die Klasse.Damit es funktioniert, müssen Sie eine TypeAdapterFactory.
Und registrieren Sie die TypeAdapterFactory zu Ihrem Gson-generator.
AFAIK ist die Verwendung einer TypeAdapterFactory. Ein direkt registriert TypeAdapter
scheint, um ignoriert zu werden, wenn ein Objekt des Typs
Class
aufgetreten ist.Gson verwandelt sowohl die
HashMap
- und Java-Klasse, die Instanzen zu JSON-Objekten.Beispiel:
registerTypeAdapter(Class.class, new ClassTypeAdapter())
arbeitet mit gson 2.8.5. Vielen Dank für die Lösung.