2010-02-22 118 views
1

我注意到人们之前写过有关此循环引用问题的文章,但之前没有发布解决方案。将实体数据模型实体作为JSON数据返回

我在说这个错误: “序列化'DocInvoice.Models.Clients'类型的对象时检测到循环引用。

有没有人试图用Json.NET库序列化它到JSON?

如果我有Linq实体查询,是我唯一的选择手代码实体属性,并省略那些是导航属性?因为这些是造成问题的原因..

虽然这是令人讨厌的,因为您必须在Linq“new”语句中手写几十个(或更多)实体属性。举例来说,如果我想所有的属性我能做到这一点,但它会导致循环引用错误:

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}; 

唯一的选择是:

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

回答

2

投影到一个匿名类型(你的第二个例子)是正确的做法。如果稍后将其他属性添加到实体中,那么这是唯一能够防止代码泄漏信息的东西。匿名类型明确限制了您的代码返回的内容。

+0

好评及解释,谢谢 – mare 2010-02-22 19:06:06

相关问题