2009-09-23 18 views
7

Tengo un conjunto de clases de sqq a sql y las serialicé en JSON utilizando .NET JavaScriptSerializer.Excepción de referencia circular al serializar las clases de LINQ a SQL

Sin embargo, tan pronto como agregue el registro en una tabla relacionada, la serialización arroja una "excepción de referencia circular". Aaarggh!

Se describe con detalle here.

Tengo algunas opciones

  • Convertir los LINQ a SQL clase a una clase que no tiene relaciones evitando así la referencia circular
  • SNiP la referencia circular por las asociaciones de anulación - No considero que esto ser una opción real
  • Usar ScriptIgnoreAttribute (de alguna manera). No pude aplicar esto fácilmente porque las propiedades están en clases generadas y LINQ to SQL no respeta automáticamente las clases de amigo
  • Use JSON.NET y de alguna manera use clases de atributos + compañeros para detener el serializador que intenta recorrer las relaciones.

¿Alguien más ha encontrado esto? Realmente preferiría la última opción si es posible, pero no sé cómo hacer esto.

Cualquier ayuda es muy apreciada

Respuesta

8

La última versión de Json.NET soporta la serialización de relaciones circulares. Consulte Preserving Object References en la ayuda.

+2

escribió una publicación que detalla la configuración: http://www.johnnycode.com/blog/2012/04/10/serializing-circular-references-with-json-net-and-entity-framework/ –

1

solución de James resuelto parte de mi problema. Necesitaba excluir ciertos tipos de lista dentro del objeto. Para resolver mi problema, simplemente copié las partes del objeto que necesitaba. Lo siguiente es un ejemplo.

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 
       })); 
Cuestiones relacionadas