7
votes

Exception de référence circulaire lors de la sérialisation LINQ vers des classes SQL

J'ai un ensemble de linq vers des classes SQL et les sérialiser dans JSON en utilisant le fichier javascripterializer.

Cependant, dès que j'ajouterais un enregistrement sur une table relative, la sérialisation jette une "exception de référence circulaire". Aaarggh!

Il est décrit en détail ici .

J'ai quelques options

  • Convertissez la linq en classe SQL en classe sans relations, évitant ainsi la référence circulaire
  • SNIP La référence circulaire des associations de nulling - Je ne considère pas que ceci soit une véritable option
  • Utilisez scriptonIndeattribute (en quelque sorte). Je ne pouvais pas l'appliquer facilement parce que les propriétés sont dans les classes générées et Linq à SQL n'honorent pas automatiquement les classes de Buddy
  • Utilisez JSON.NET et d'une manière d'une manière ou d'une autre, utilisez des attributs + des classes d'amis pour arrêter le sérieliseur d'essayer de traverser des relations.

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

    Toute aide est grandement appréciée


0 commentaires

3 Réponses :


8
votes

La dernière version de JSON.NET prend en charge les relations circulaires sérialisées. Découvrez Préservation des références d'objet dans l'aide.


1 commentaires

A écrit un poteau de blog détaillant la configuration: johnnycode.com/blog/2012/04/10/...




1
votes

La solution de James a résolu une partie de mon problème. Je devais exclure certains types de liste dans l'objet. Pour résoudre mon problème, je viens de copier 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
                }) );


0 commentaires