2009-09-23 8 views
7

J'ai un ensemble de classes linq à sql et les sérialise en JSON en utilisant le .NET JavaScriptSerializer.Exception de référence circulaire lors de la sérialisation des classes LINQ to SQL

Cependant, dès que j'ajoute un enregistrement sur une table de rattachement, la sérialisation génère une "exception de référence circulaire". Aaarggh!

Il est décrit en détail here.

J'ai quelques options

  • Convertir LINQ à la classe sql à une classe sans relations évitant ainsi la référence circulaire
  • snip la référence circulaire par les associations de mise à zéro - Je ne pense pas que cela être une véritable option
  • Utilisez ScriptIgnoreAttribute (en quelque sorte). Je ne pourrais pas facilement l'appliquer car les propriétés sont dans les classes générées et LINQ to SQL n'honore pas automatiquement les classes buddy
  • Utilise JSON.NET et utilise en quelque sorte les attributs + classes buddy pour empêcher le sérialiseur de parcourir les relations.

Est-ce que quelqu'un d'autre a rencontré cela? Je préférerais vraiment la dernière option si possible mais je ne sais pas comment faire.

Toute aide est grandement appréciée

Répondre

8

La dernière version de Json.NET prend en charge les relations sérialisation circulaires. Découvrez Preserving Object References dans l'aide.

+2

a jouté un message blog détaillant la configuration: http://www.johnnycode.com/blog/2012/04/10/serializing-circular-references-with-json-net-and-entity-framework/ –

1

solution de James résoudre une partie de mon problème. J'avais besoin d'exclure certains types de liste dans l'objet. Pour résoudre mon problème, j'ai simplement copié les parties de l'objet dont j'avais besoin. Ce qui suit est un exemple.

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 
       })); 
Questions connexes