Ok, así que edité la pregunta porque no era lo suficientemente clara.GSON: deserialización de objetos personalizados
Editar 2: actualizó el archivo JSON.
Estoy usando GSON en una aplicación para Android, y necesito analizar archivos JSON, que provienen de un servidor, y son un poco demasiado complejos. No quiero que mi estructura de objetos sea demasiado pesada, por lo que me gustaría simplificar los contenidos: , por lo que la estructura de mi objeto no será la estructura del archivo JSON.
Por ejemplo, si en el JSON tengo esto:
{
"object1":{
"attribute1" : "test1",
"attribute40" : "test40",
"user":{
"id":1,
"name":"foo"
}
,"example":{
"total":10,
"list":[
{
"tag":"tag1",
"name":"object name 1",
"pos":1
},
{
"tag":"tag10",
"name":"object name 10",
"pos":10
}
]
}
}
"object2":{
"attribute1":"test..."
}
}
no quiero tener en mi estructura de objeto actual, un objeto Example
, que contiene un ArrayList
y un "total" int
. Pero me gustaría mantener solo una cadena simple con el valor "object name 1;object name 2;..."
.
Además, me gustaría almacenar solo el Id del usuario, no el Usuario completo, porque ya tengo el usuario completo almacenado en otro lugar, con otra llamada a la API del servidor.
Así que mi clase de la clase sería algo así como:
class Foo{
int userId;
String example; //"object name 1;object name 2;..."
...
}
así que supongo que podemos lograr esto con un deserializer costumbre, pero no encuentro la forma. Me gustaría si es posible minimizar la memoria, por lo que no creo que tener un ejemplo de objeto completo, y luego usarlo para construir mi String example
es una forma correcta.
En el peor de los casos, si es demasiado complicado, me gustaría poder almacenar al menos solo la lista de elementos de etiqueta cuando analizo el objeto de ejemplo: entonces necesito un deserializador personalizado para deshacerme de la int total
.
por lo que tendría:
class Foo{
int userId;
ArrayList<Tag> example;
...
}
De acuerdo con sus requisitos especiales, GSON está sobrecargado. Simplemente pase su cadena JSON al constructor de su modelo de dominio y luego use la manipulación de cadena simple para dividir/extraer el campo requerido. – yorkw
Bueno, seguro que podría ser una solución, pero tengo muchos archivos JSON con más de 30 campos cada vez, y la estructura puede evolucionar en el futuro. Por lo tanto, definitivamente preferiría usar una lib como GSON para minimizar el trabajo y el mantenimiento. Especialmente si ya lo uso en ciertos archivos JSON. – Chayy
"la estructura puede evolucionar en el futuro", desde la perspectiva de OO, se recomienda encarecidamente modelar el objeto de dominio completo ahora, aunque no utilice todas sus propiedades. – yorkw