2011-12-06 12 views
5

Ho trovato molti articoli sulla referenza circolare con Gson, ma non riesco a trovare una soluzione elegante.Esiste una soluzione su Gson "riferimento circolare"?

Per quanto ne so, alcune soluzioni sono:

  • Impostare la proprietà che ha causato riferimento circolare come "transitoria".
  • esclude la proprietà con alcune annotazioni.

Ma come domanda generale, esiste una strategia comune per risolvere il problema?

+2

Uno strano gioco, l'unico modo per vincere è non giocare. Repartition in modo da non avere riferimenti circolari. – DwB

+0

La preoccupazione riguarda solo la serializzazione o è anche la definizione dei collegamenti corretti durante la deserializzazione? –

+0

Sì, c'è! Date un'occhiata a questo post che comprende un [esempio GraphAdapterBuilder] [1] [1]: http://stackoverflow.com/questions/10036958/the-easiest-way-to- remove-the-bidirectional-recursive-relations – ouba64

risposta

2

Per quanto ne so, non esiste una soluzione automatizzata per i riferimenti circolari in Gson. L'unica libreria che produce JSON che conosca gestisce i riferimenti circolari automaticamente è XStream (con il backend Jettison).

MODIFICA: Jackson supporta anche la gestione di riferimenti circolari con annotazione @JsonIdentityInfo; quindi, anche se non automatico (è necessario contrassegnare i riferimenti che richiedono la gestione dell'ID oggetto), consente di risolvere la maggior parte dei casi.

+1

Corretto, Gson non ha una soluzione automatica per i riferimenti circolari, né offre una soluzione di serializzazione diversa dalla marcatura Java campi da saltare e/o scrivere codice di serializzazione personalizzato. In alternativa, Jackson fornisce una soluzione basata su annotazioni per problemi di serializzazione e deserializzazione. Vedere il punto 7 all'indirizzo http://www.cowtowncoder.com/blog/archives/2010/11/entry_434.html –

+0

Grazie, ho risolto il problema escludendo i campi indirettamente. E studierò XStream quando avrò tempo libero. –

+0

Più uno per XStream. L'unica soluzione praticabile che ho trovato sembra funzionare. –

-4

Come noto, la versione Gson più recente ha risolto il danno meccanico.

+0

hanno appena provato con l'ultima versione (2.3.1) e sono ancora lì – DaveB

Problemi correlati