J'ai une application MVC-3 (RC1) en utilisant Entity Framework 4.Comment puis-je éviter une référence circulaire lors de la sérialisation Entity Framework classe
Je souhaite retourner un objet JSON d'une action du contrôleur. Cet objet est référencé par d'autres objets, qui renvoient évidemment la référence.
Je reçois ainsi l'erreur de référence circulaire suivante:
Server Error in '/' Application.
A circular reference was detected while serializing an object of type 'Application.Models.ReferenceObject'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: A circular reference was detected while serializing an object of type 'Application.Models.ReferenceObject'.
NB: application & ReferenceObject remplacent évidemment pour l'espace de noms réel/objet.
Selon Stack Overflow: Circular reference exception when serializing LINQ to SQL classes, cela peut être surmonté en utilisant JSON.Net; Cependant, je voudrais éviter cela et à la place essayer d'exclure les propriétés de référence fautives de l'objet en cours de sérialisation.
Qu'est-ce que je veux dire?
Je veux faire quelque chose comme ceci:
IList<ReferenceObject> list = Repository.GetReferenceObjects();
return Json(list.**<method>**("ObjectsReferencingThis"));
où **<method>**
est une méthode qui fait le contraire à la méthode ObjectQuery(Of T).Include
et ObjectsReferencingThis
est la propriété qui est à l'origine de la référence circulaire.
NB: Je ne souhaite pas supprimer ces propriétés ou créer des POCO car cela n'affecte que la sérialisation Json.
Toute personne pouvant vous aider s'il vous plaît?
:)
Salut @laurvasile, eh oui, cela a été la méthode que j'utilise comme une "solution de contournement" aussi bien. Je ne suis pas content à 100% car ce n'est pas exactement dynamique ... tout changement au Model doit alors être reflété dans cette conversion manuelle de JSON. Je pense que ce serait beaucoup plus efficace si vous pouviez simplement exclure un champ/propriété/référence dans le cadre de la requête LINQ, similaire à la fonction INCLUDE. –
accepté comme réponse (bien que ce soit en fait une "solution de contournement" imho) –