Ich habe erfolgreich mit GSON begonnen, um eine Hierarchie von Objekten in meiner Android-Anwendung zu serialisieren und zu deserialisieren.Abschluss der Objektkonstruktion nach der GSON-Deserialisierung
Einige der Objekte, die serialisiert werden, haben Mitglieder, die ich als markieren muss (oder alternative GSON-Annotationen verwenden, um zu verhindern, dass sie serialisiert werden), weil sie Verweise auf Objekte sind, die ich nicht als Teil des Ausgangs JSON serialisieren möchte Zeichenfolge. Diese Referenzen beziehen sich auf Objekte, die auf andere Weise getrennt konstruiert werden müssen.
Sobald die Struktur wieder in Java-Objekte de-serialisiert wird, muss ich diese Referenzen irgendwann ausfüllen. Ich könnte dies leicht tun, indem ich eine Reihe von Methoden des Typs setXXX()
einsetze, aber bis dahin sind diese Objekte in einem unvollständigen Zustand. Ich frage mich daher, ob es einen robusteren Ansatz dafür gibt.
Ways Ich habe von so weit gedacht:
Haben die Objekte eine
RuntimeException
(oder etwas mehr geeignet) werfen, wenn sie in einem unvollständigen Zustand sind; das heißt, wenn sie aufgefordert werden, etwas zu tun, wenn eine Initialisierungsmethode nicht aufgerufen wurde.Trennen Sie die serialisierbaren Bits in ein separates Datenmodellobjekt. Mit anderen Worten, nehmen Sie das Zeug heraus, das nicht serialisiert werden kann. Erstellen Sie nach der GSON-Deserialisierung meine "echten" Objekte mit diesen Datenobjekten in ihrer Zusammensetzung. Dies scheint die Bequemlichkeit der Verwendung von GSON etwas zu besiegen.
Schreiben Sie einen benutzerdefinierten Deserializer für GSON, um die spezielle Erstellung dieser Objekte zu behandeln.
Vielen Dank. Ich denke, ich sollte diesen zweiten Ansatz wählen, da ein anderes Problem darin besteht, dass meine JSON-Ausgabe momentan sehr eng an die eigentliche Klassenimplementierung gekoppelt ist und ich auch an Versionsverwaltung interessiert bin (es könnte unordentlich werden, wenn JSON-Datei in eine neuere App geladen wird) vesion, in dem sich die Klassenstrukturen geändert haben). Das Zuordnen der Anwendungsklassen zu einer Baumstruktur von 'Modell'-Klassen zum Zweck der Persistenz scheint ein guter Weg zu sein, um all dies zu lösen.Dumme Frage, aber welche Terminologie würden Sie verwenden, um zwischen einer realen Arbeiterklasse und einer Datenmodellklasse zu unterscheiden? – Trevor
Vielleicht ViewModel oder PersistenceModel oder SerializedModel oder JsonModel oder IntegrationModel oder ServiceModel oder etwas anderes. –