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.

  • Cómo enviar json de android a php?
  • Obtener claves de array json en android
  • Org.json.JSONObject no se puede convertir en JSONArray
  • Parse Json en el estudio android de String
  • Usando Gson para deserializar a Json en un singleton
  • Respuesta HTML desde el servidor
  • Determine si JSON es un JSONObject o JSONArray
  • Jackson deserializar con deserializador personalizado causa una gran cantidad de llamadas GC y toma mucho más tiempo
  • Android: cargar imagen y JSON utilizando MultiPartEntityBuilder
  • Análisis de un ID de cadena con SugarORM y GSON
  • Varias llaves y valores de JSONObject no se guardarán en Parse
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.