2011-12-06 17 views
5

He encontrado muchos artículos sobre la referencia circular con Gson, pero no puedo encontrar una solución elegante.¿Hay alguna solución sobre la "referencia circular" de Gson?

Como sé, algunas de las soluciones es:

  • establecer la propiedad que causó referencia circular como "transitoria".
  • excluyen la propiedad con algunas anotaciones.

Pero como una pregunta general, ¿hay alguna estrategia común para resolver el problema?

+2

Un extraño juego, la única forma de ganar es no jugar. Repartición para que no tenga referencias circulares. – DwB

+0

¿Le preocupa solo la serialización, o también está estableciendo los enlaces correctos durante la deserialización? –

+0

Sí, hay! Echa un vistazo a este post que incluye una [ejemplo GraphAdapterBuilder] [1] [1]: http://stackoverflow.com/questions/10036958/the-easiest-way-to- remove-the-bidirectional-recursive-relationships – ouba64

Respuesta

2

Por lo que yo sé, no existe una solución automática para las referencias circulares en Gson. La única biblioteca que produce JSON que conozco que maneja referencias circulares automáticamente es XStream (con back-end Jettison).

EDITAR: Jackson también admite el manejo de referencias circulares con la anotación @JsonIdentityInfo; por lo tanto, aunque no es automático (es necesario marcar las referencias que necesitan el manejo de Object Id), sí permite resolver la mayoría de los casos.

+1

Correcto, Gson no tiene una solución automática para referencias circulares, ni ofrece una solución de serialización que no sea marcar Java campos para omitir y/o escribir código de serialización personalizado. Alternativamente, Jackson proporciona una solución basada en anotaciones para problemas de serialización y deserialización. Ver el punto # 7 en http://www.cowtowncoder.com/blog/archives/2010/11/entry_434.html –

+0

Gracias, he solucionado el problema excluyendo los campos indirectamente. Y estudiaré XStream cuando tenga tiempo libre. –

+0

Más uno para XStream. La única solución viable que he encontrado parece funcionar. –

-4

Como sé, la versión más nueva de Gson ha resuelto el daño mecánico.

+0

acabamos de probar con la última versión (2.3.1) y sigue ahí – DaveB

Cuestiones relacionadas