2010-02-22 7 views
1

J'ai remarqué que les personnes avaient déjà écrit sur ce problème de référence circulaire mais aucune solution n'a jamais été publiée.Entités du modèle de données de l'entité de retour en tant que données JSON

Je parle de cette erreur: "Une référence circulaire a été détectée lors de la sérialisation d'un objet de type 'DocInvoice.Models.Clients'."

Est-ce que quelqu'un a essayé de le sérialiser en JSON avec la bibliothèque Json.NET?

Si j'ai des requêtes Linq vers des entités, est-ce ma seule option pour coder manuellement les propriétés d'entité et ignorer celles qui sont des propriétés de navigation? Parce que ce sont ceux qui font des problèmes ..

Il est ennuyeux parce que vous devez écrire à la main comme des douzaines (ou plus) propriétés d'entité dans Linq "nouvelle" déclaration. Par exemple, si je veux toutes les propriétés que je peux le faire, mais il en résulte une erreur de référence circulaire:

var clients = from client in edmx.Clients 
    from postcode in edmx.PostCodes 
    where (client.client_firstname.StartsWith(q) || 
        client.client_lastname.StartsWith(q)) && 
        postcode.postcode == client.PostCodes.postcode 
    select new {client, postcode}; 

la seule autre option est:

select new { client.client_id, 
      client.client_firstname, 
      ....., ... , 
      postcode.postcode 
      }; ... 

Répondre

2

Projeter sur un type anonyme (votre deuxième exemple) est la bonne façon de le faire. C'est la seule chose qui empêche votre code de divulguer des informations si des propriétés supplémentaires sont ajoutées à l'entité plus tard. Le type anonyme limite clairement le retour de votre code.

+0

Joli commentaire et explication, merci – mare

Questions connexes