我一直试图让实体框架模型转换为JSON以显示在网页中。 Entity对象创建正常,但返回时失败。下面是我的ASP.NET Web API项目中的代码。通过设置断点,我可以看到对象集合创建得很好。
public class ClientsController : ApiController
{
public IEnumerable<Client> GetAllClients()
{
using (var context = new MyClientModel.MyEntities())
{
var query = context.Clients.Where(c => c.State == "CA");
var customers = query.ToList();
return customers;
}
}
}
以下是我用来调用ASP.NET Web API的HTML / Javascript代码
<script>
var uri = 'api/clients';
$(document).ready(function () {
// Send an AJAX request
$.getJSON(uri)
.done(function (data) {
// On success, 'data' contains a list of products.
alert('Made it!'); // ** Never reaches here **
$.each(data, function (key, item) {
// Add a list item for the product.
$('<li>', { text: item }).appendTo($('#clients'));
});
});
});
</script>
我使用Fiddler来查看响应,它返回一个.NET错误,上面写着......
The 'ObjectContent' type failed to serialize the response body for content type 'application/json; charset=utf-8'."
并且内部异常消息是......
Error getting value from 'Patients' on 'System.Data.Entity.DynamicProxies.Client
患者是我模型中的一个相关实体,但我很困惑,为什么它会成为一个问题,因为我只返回客户端对象。
答案 0 :(得分:1)
我找到了一个有效的解决方案,但我承认我不确定它是如何工作的。我将行context.Configuration.ProxyCreationEnabled = false;
添加到我的方法中,该方法返回对象集合并返回所有对象。我从以下SO Question - WebApi with EF Code First generates error when having parent child relation获得了代码。
public class ClientsController : ApiController
{
public IEnumerable<Client> GetAllClients()
{
using (var context = new MyClientModel.MyEntities())
{
context.Configuration.ProxyCreationEnabled = false; // ** New code here **
var query = context.Clients.Where(c => c.State == "CA");
var customers = query.ToList();
return customers;
}
}
}