2010-12-25 3 views
0

Ich möchte Java-Objekte zu/von JSON serialisieren/deserialisieren. Das Google Gson ist vorzuziehen. Sei I Klasse A haben:JSON-Objekt Serialisierung/Deserialisierung mit Google-Gson

 
class A { 
    int x = 1; 
    int y = 2; 
} 

Dann, wenn ich neue nennen Gson() toJson (new A()) Ich werde das erhalten folgende:.

 
{ x: 1, y : 2}. 

aber ich

haben wollen

So kann ich es deserialisieren, indem ich Reflektion verwende, ohne den Klassennamen zur Kompilierzeit zu kennen. Wie kann ich es tun? Danke.

Antwort

0

Ihr zweites Beispiel ist nicht JSON. Wenn Sie wollen etwas, das Instanzstatus und spezifische Klassen usw. unterhält Besuche YAML

http://www.yaml.org/

+0

Ich brauche nur ein Feld pro Objekt hinzufügen, die einen Klassennamen beschreiben wird. JSON ist nativ für Android, also bevorzuge ich es. – Boris

+0

Es wird "Serialisierung" Seite lösen, aber Deseriazierung bleibt problematisch. – Boris

+0

Ja, ich glaube nicht, dass Json ausgestattet ist, um zu tun, was Sie wollen. Sie sollten wirklich yaml überprüfen. YAML ist eine Obermenge von JSON und es kann ziemlich genau das, was Sie wollen (vorausgesetzt, ich verstehe, was Sie wollen) – Falmarri

0

Wenn Gson Verwendung vorzuziehen ist oder erforderlich ist, dann spezifisch auf die Frage, wie JSON der Struktur {class:"A", x:1, y:2} von einem Java zu generieren Instanz der Struktur class A {int x = 1; int y = 2;}, ist es derzeit erforderlich, benutzerdefinierte Serialisierung zu implementieren. Um von diesem JSON zu dieser Java-Struktur zu deserialisieren, ist es erforderlich, eine benutzerdefinierte Deserialisierung zu implementieren.

Statt einer solchen "manuellen" Verarbeitung, beachten Sie, dass Gson bald die RuntimeTypeAdapter für einfachere polymorphe Deserialisierung zur Verfügung haben wird. Siehe http://code.google.com/p/google-gson/issues/detail?id=231 für weitere Informationen. Auch wenn Sie RuntimeTypeAdapter nicht verwenden können, bietet es zumindest ein Beispiel zum Erstellen eines konfigurierbaren benutzerdefinierten Deserialisierers.

Wenn Sie JSON-Mapping-APIs wechseln können, dann empfehle ich, Jackson zu betrachten, da es einen funktionierenden und relativ einfachen polymorphen Deserializer-Mechanismus zur Verfügung hat. Ich habe einige einfache Beispiele unter http://programmerbruce.blogspot.com/2011/05/deserialize-json-with-jackson-into.html veröffentlicht.