Warum verwendet GSON NUR Felder (privat, öffentlich, geschützt)? Gibt es eine Möglichkeit, GSON anzuweisen, nur Getter und Setter zu verwenden?
79
Wenn Sie ein Objekt serialisieren / deserialisieren, erhalten Sie im Allgemeinen eine exakte Kopie des Objektstatus. Daher möchten Sie im Allgemeinen die Kapselung umgehen, die normalerweise in einem OO-Design gewünscht wird. Wenn Sie die Kapselung nicht umgehen, ist es möglicherweise nicht möglich, ein Objekt zu erhalten, das nach der Deserialisierung genau den gleichen Status aufweist wie vor der Serialisierung. Betrachten Sie außerdem den Fall, in dem Sie keinen Setter für eine bestimmte Eigenschaft bereitstellen möchten. Wie sollte Serialisierung / Deserialisierung funktionieren, wenn Sie die Getter und Setter durcharbeiten?
transient
damit sie nicht serialisiert und auf Anfrage neu berechnet werden.Noch nicht.
Aus dem Designdokument :
quelle
Es ist möglich, Gson zu patchen, um Getter zu verwenden .
quelle
Der vage Umriss, wie dies in unserer App funktioniert, ist, dass wir viele
TypeAdapter
Implementierungen haben - einige für bestimmte wertähnliche Objekte und einige für Objekte im Bean-Stil, bei denen wir wissen, dass die JavaBeans-Logik funktioniert. Wir jammen dann alle diese auf ein,GsonBuilder
bevor wir dasGson
Objekt erstellen .Leider ist GSON wirklich beschissen im Umgang mit Typen wie
Object[]
. Wir haben dies meistens gesehen, als wir versucht haben, ein JSON-Objekt zur Darstellung von Methodenparametern zu erstellen. Die Problemumgehung bestand darin, benutzerdefinierteTypeAdapter
Instanzen zu erstellen, die die Methoden widerspiegeln. (Dies bedeutet, dass Sie am Ende eineGson
Instanz pro Methode verwenden, die Sie aufrufen möchten ...)quelle