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.

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.

  • ¿Está bien para guardar una matriz JSON en SharedPreferences?
  • Obtención de imagen de la matriz de bytes en el objeto JSON a la aplicación de Android
  • Aplicación Web de Android RESTful con Zend Framework
  • Cómo analizar este tipo de json String con Gson?
  • Se esperaba BEGIN_OBJECT pero era BEGIN_ARRAY en la línea 1 columna 2 (edición pequeña)
  • El método más simple para convertir Json a Xml
  • Lazy descargar imágenes en gridView
  • Cómo anidar objetos al crear JSON con JSONObject
  • Llame a la variable de tipo de referencia WCF
  • JSON `date (...)` a `java.Util.Date` usando` org.json`
  • Cómo enviar datos JSON ARRAY al servidor en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.