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.
- UnitTest JSONObject muestra null
- JSON a java utilizando gson
- Importa datos de JSON o XML feed y crea una lista en Android
- ¿Cómo publicar datos en un Webservice usando JSON?
- Org.codehaus.jackson.JsonParseException: carácter inesperado ('' (código 65279 / 0xfeff)): se espera un valor válido
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.
- Cómo convertir json objeto en cadena en android ..?
- JSON extrae contenido de URL para Android
- Android - ¿cómo agregar el objeto JSON a sharedPreferences?
- ¿Cómo usar HTTPS y HTTP para analizar datos JSON en Android?
- Conversión de imagen de Base64 en android resultando en imagen dañada
- Publicar campos en este formato con Retrofit
- Cómo obtener valores json array en android?
- Prueba si getJSONArray es nulo o no
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.
- Poner permisos a manifiesto del proyecto de la biblioteca .aar de Android
- <Compatible-pantallas> excluye la aplicación de Nexus 5x en Google Play