2009-09-23 18 views
7

Ho un set di classi da linq a sql e li serializzo in JSON utilizzando .NET JavaScriptSerializer.Eccezione di riferimento circolare durante la serializzazione delle classi da LINQ a SQL

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

È descritto in dettaglio here.

Ho un paio di opzioni

  • Convertire il LINQ to SQL di classe a una classe senza relazioni evitando così il riferimento circolare
  • snip il riferimento circolare dalle associazioni nulling - non ritengo che questo essere un'opzione reale
  • Utilizzare 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 attributi + classi buddy per fermare il serializzatore che prova a camminare attraverso le relazioni.

Qualcun altro ha riscontrato questo? Preferirei davvero l'ultima opzione, se possibile, ma non so come farlo.

Qualsiasi aiuto è molto apprezzato

risposta

8

L'ultima versione di Json.NET supporta la serializzazione relazioni circolari. Controlla Preserving Object References nell'aiuto.

+2

ha postato sul blog in dettaglio il programma di installazione: http://www.johnnycode.com/blog/2012/04/10/serializing-circular-references-with-json-net-and-entity-framework/ –

1

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

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