/ Abschluss der Objektkonstruktion nach GSON-Deserialisierung - Java, Android, Json, Gson

Komplettieren der Objektkonstruktion nach GSON Deserialisierung - Java, Android, JSON, Gson

Ich habe mit GSON erfolgreich begonnen, eine Hierarchie von Objekten in meiner Android-Anwendung zu serialisieren und zu de-serialisieren.

Einige der Objekte, die serialisiert werden, haben Mitglieder, die ich als kennzeichnen muss transient (oder verwenden Sie auf andere Weise alternative GSON - Anmerkungen zuverhindern, dass sie serialisiert werden), da sie auf Objekte verweisen, die ich nicht als Teil der Ausgabe-JSON-Zeichenfolge serialisieren möchte. Diese Verweise beziehen sich auf Objekte, die auf andere Weise getrennt konstruiert werden müssen.

Sobald die Struktur wieder in Java-Objekte de-serialisiert wurde, muss ich diese Referenzen irgendwann ausfüllen. Ich könnte dies leicht tun, indem ich vielleicht eine Reihe von setXXX() Geben Sie Methoden ein. Bis dahin befinden sich diese Objekte jedoch in einem unvollständigen Zustand. Ich frage mich daher, ob es einen robusteren Ansatz dafür gibt.

Möglichkeiten, über die ich bisher nachgedacht habe:

  • Lass die Objekte einen werfen RuntimeException (oder etwas passenderes), wenn sie sich in einem unvollständigen Zustand befinden, das heißt, wenn sie aufgefordert werden, etwas zu tun, wenn eine Initialisierungsmethode nicht aufgerufen wurde.

  • Trennen Sie die serialisierbaren Bits in aseparates Datenmodellobjekt. Mit anderen Worten, nehmen Sie das Zeug heraus, das nicht serialisiert werden kann. Bauen Sie nach der GSON-Deserialisierung meine "echten" Objekte mit diesen Datenobjekten in ihrer Zusammensetzung auf. Dies scheint die Bequemlichkeit der Verwendung von GSON etwas zu beeinträchtigen.

  • Erstellen Sie einen benutzerdefinierten Deserializer für GSON, der die spezielle Erstellung dieser Objekte übernimmt.

Antworten:

6 für die Antwort № 1

Ich würde wahrscheinlich den zweiten Ansatz wählen, weilWährend ich normalerweise meine Anwendungen entwerfe, ist alles, was serialisiert / deserialisiert werden muss, einfach nur alte Daten oder POJOs, wenn Sie es vorziehen. Wenn ich die Serialisierungs-API anpassen / konfigurieren muss, um das zu tun, was ich will, neige ich dazu, die Serialisierung zu vereinfachen, sodass für die Serialisierungs-API keine zusätzlichen Konfigurationen erforderlich sind.

Also, wenn ich ein komplizierteres Datenmodell habe,Teile, die nicht serialisiert / deserialisiert werden sollen, extrahiere ich daraus einen einfacheren Satz von POJOs als konzeptionell separates Datenmodell, um an der Serialisierung / Deserialisierung teilzunehmen. Dies erfordert dann tatsächlich einen zusätzlichen Schritt, um zwischen den beiden zuzuordnen Datenmodelle, aber das ist normalerweise auch ziemlich einfach.

Wenn der dritte Ansatz bevorzugt wird, beachten Sie auch die Instance Creator-Funktion, da dies einen weiteren nützlichen Einstieg in das Anpassen des Deserialisierungsprozesses bieten kann.


9 für die Antwort № 2

Auschecken https://github.com/julman99/gson-fire

Es ist eine Bibliothek, die ich erstellt habe und die Gson auf Fälle wie Post-Serialization und Post-Deserialization erweitert

Es hat auch viele andere coole Features, die ich im Laufe der Zeit mit Gson gebraucht habe.