将实体数据模型实体作为JSON数据返回

时间:2010-02-22 16:27:12

标签: asp.net-mvc json entity-framework linq-to-entities

我注意到人们之前写了很多关于这个循环引用问题的文章,但是没有发布任何解决方案。

我在说这个错误: “序列化'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
           }; ...

1 个答案:

答案 0 :(得分:2)

投射到匿名类型(您的第二个示例)是正确的方法。如果以后向实体添加其他属性,这是唯一可以防止您的代码泄露信息的事情。匿名类型明确限制了代码返回的内容。