Finalización de la construcción de objetos después de la deserialización de GSON

He iniciado correctamente el uso de GSON para serializar y des-serializar una jerarquía de objetos en mi aplicación de Android.

Algunos de los objetos que se serializan tienen miembros que debo marcar como transient (o de otro modo utilizar anotaciones alternativas de GSON para evitar que se serialicen) porque son referencias a objetos que no quiero serializar como parte de la cadena de salida JSON. Esas referencias son a objetos que deben ser construidos por separado por otros medios.

Una vez que la estructura se de-serializado de nuevo en objetos Java, en algún momento tengo que rellenar esas referencias. Podría fácilmente hacer esto quizás usando una serie de métodos del tipo setXXX() , pero hasta que eso es hecho, esos objetos están en un estado incompleto. Por lo tanto, me pregunto si hay un enfoque más robusto al respecto.

Formas que he pensado hasta ahora:

  • Haga que los objetos lancen una RuntimeException (o algo más adecuado) si están en un estado incompleto; Es decir, si se les pide que hagan algún trabajo cuando no se llame algún método de inicialización.

  • Separe los bits serializables en un objeto de modelo de datos independiente. En otras palabras, saque las cosas que no pueden ser serializadas. Después de la des-serialización de GSON, construya mis objetos "reales" usando esos objetos de datos en su composición. Esto parece derrotar la conveniencia de usar GSON algo.

  • Escriba un deserializador personalizado para GSON para manejar la creación especial de esos objetos.

2 Solutions collect form web for “Finalización de la construcción de objetos después de la deserialización de GSON”

Probablemente tomaría el segundo enfoque, porque como normalmente diseño mis aplicaciones, todo lo que necesita ser serializado / deserializado es realmente simplemente datos antiguos, o POJOs si lo prefiere. Si me encuentro necesitando personalizar / configurar el API de serialización para hacer lo que quiero, tienden a simplificar lo que se está serializando, por lo que la API de serialización no necesita las configuraciones adicionales.

Por lo tanto, si tengo un modelo de datos más complicado, cuyas partes no se serializarán / deserializan, extraeré de él un conjunto más simple de POJOs, como un modelo de datos conceptualmente separado para participar en la serialización / deserialización. Esto, de hecho, requiere un paso extra para el mapa entre los dos modelos de datos, pero eso es generalmente bastante simple, también.

Si se prefiere el tercer enfoque, observe también la función del creador de instancias , ya que puede proporcionar otro gancho útil para personalizar el proceso de deserialización.

Echa un vistazo a https://github.com/julman99/gson-fire

Es una biblioteca que he hecho que extiende Gson para manejar casos como post-serialización y post-deserialización

También tiene muchas otras características interesantes que he necesitado con el tiempo con Gson.

  • Mapa Ver instrucciones de dibujo usando google Directions API - decodificar polilíneas
  • Android newline en mi EditText
  • Android: Se ha intentado serializar ... ¿Ha olvidado registrar un adaptador de tipo? "
  • Cómo comprobar si existe una clave en Json Object y obtener su valor
  • ¿Cómo funciona GCM? (Mensajería en la nube google para Android)
  • Java: Vista previa de la solicitud HttpPost
  • Escribir archivo .json y leer ese archivo en Android
  • LoganSquare analiza en objeto o mapa genérico
  • Interfaz de importación json de Java para Android / Java
  • Uso de Google Cloud Storage JSON api en android
  • Almacenamiento en caché de los datos descargados de JSON en la base de datos SQLite - ¿es una buena idea?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.