转换为JSON时,实体对象失败

时间:2014-05-28 16:05:45

标签: json entity-framework-6

我一直试图让实体框架模型转换为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

患者是我模型中的一个相关实体,但我很困惑,为什么它会成为一个问题,因为我只返回客户端对象。

1 个答案:

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