Eccezione di riferimento circolare durante la serializzazione di classi LINQ in SQL

Ho un set di classi da linq a sql e li ho serializzati in JSON usando .NET JavaScriptSerializer.

Tuttavia, non appena aggiungo un record a una tabella correlata, la serializzazione genera una “eccezione di riferimento circolare”. Aaarggh!

È descritto in dettaglio qui .

Ho alcune opzioni

  • Converti la class da linq a sql in una class senza relazioni evitando così il riferimento circolare
  • snip il riferimento circolare annullando le associazioni – non ritengo che questa sia una vera opzione
  • Usa ScriptIgnoreAttribute (in qualche modo). Non ho potuto facilmente applicare questo perché le proprietà sono in classi generate e LINQ to SQL non onora automaticamente le classi buddy
  • Usa JSON.NET e in qualche modo usa gli attributi + le classi buddy per fermare il serializzatore che tenta di attraversare le relazioni.

Qualcun altro l’ha incontrato? Preferirei davvero l’ultima opzione, se ansible, ma non so come farlo.

Qualsiasi aiuto è molto apprezzato

L’ultima versione di Json.NET supporta la serializzazione di relazioni circolari. Scopri la conservazione dei riferimenti agli oggetti nella guida.

Link aggiuntivo per risposta accettata

Guida di Json.NET, conservazione dei riferimenti agli oggetti (con esempio)

Sembra che funzioni correttamente con LINQ to SQL

La soluzione di James ha risolto parte del mio problema. Dovevo escludere determinati tipi di elenchi all’interno dell’object. Per risolvere il mio problema, ho appena copiato le parti dell’object di cui avevo bisogno. Quanto segue è un esempio.

var DB = new DBDataContext(); var lUsers = new List(); DB.Users.ToList().ForEach(x => lUsers.Add(new User() { ID = x.ID, FIRST_NAME = x.FIRST_NAME }) );