Cómo manejar una lista heterogénea con GSon

Quiero almacenar algo como

ImmutableList<Fruit> list =
    ImmutableList.of(new Orange(42), new Banana(43), new Apple("green"), new Apple("red"));

utilizando Gson. Obviamente, necesito modificar la serialización, ya que no hay forma de recrear la Lista a partir de la salida predeterminada.

[{"value":42},{"value":43},{"color":"green"},{"color":"red"}]

Agregar un "tipo" de campo junto con un deserializador personalizado probablemente funcionaría, pero antes de intentarlo, me gustaría preguntar si hay una mejor manera.

preguntado el 12 de junio de 12 a las 18:06

Si no desea utilizar un deserializador personalizado, puede utilizar una clase específica que tenga ambos campos. Sé que construyo mis clases json directamente para las necesidades de mi intercambio json. Entonces, esas clases no son las de mi modelo de objeto de negocio principal, pero son más simples de administrar y están bien aisladas. -

Para la parte que se muestra del problema, esta es una buena solución que voy a implementar. Sin embargo, algunos de mis "frutos" pueden contener otros, así que necesito algo más. Tal vez sea realmente tan simple como agregar un campo virtual $class con valor obtenido por getClass().getName() en el serializador y usándolo en el deserializador? -

Puede hacer eso, o intentar mezclar un árbol no demasiado heterogéneo con un objeto multipotente (quiero decir con un poco más que campos mínimos) para mantener la simplicidad de json/gson. -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.