¿Por qué GSON usa SOLO campos (privados, públicos, protegidos)? ¿Hay alguna manera de decirle a GSON que use solo getters y setters?
79
En términos generales, cuando serializa / deserializa un objeto, lo está haciendo para terminar con una copia exacta del estado del objeto; Como tal, generalmente desea eludir la encapsulación normalmente deseada en un diseño OO. Si no elude la encapsulación, es posible que no sea posible terminar con un objeto que tenga exactamente el mismo estado después de la deserialización que antes de la serialización. Además, considere el caso en el que no desea proporcionar un setter para una propiedad en particular. ¿Cómo debería actuar la serialización / deserialización si está trabajando con los captadores y definidores?
transient
para que no se serialicen y recalcularse a pedido.Aún no.
Del documento de diseño :
fuente
Es posible parchear Gson para usar getters .
fuente
El esquema vago de cómo funciona esto en nuestra aplicación es que tenemos muchas
TypeAdapter
implementaciones, algunas para objetos específicos de valor y otras para objetos de estilo bean, donde sabemos que la lógica de JavaBeans funcionará. Luego colocamos todos estos en unGsonBuilder
antes de crear elGson
objeto.Desafortunadamente, GSON es realmente una mierda para manejar tipos como
Object[]
. Principalmente vimos esto cuando intentábamos hacer un objeto JSON para representar parámetros de método. La solución alternativa fue crearTypeAdapter
instancias personalizadas que reflejen los métodos. (Esto significa que terminas usando unaGson
instancia por método que pretendes llamar ...)fuente