1

我以前使用以下代码让我的 Web API 控制器正常工作:

    [Queryable(ResultLimit = 30)]
    public IQueryable<Lead> Get()
    {
        return _db.Leads;
    }

然后我在我的 Leads 表上添加了一个外键。我收到 JSON 循环错误。所以我决定只选择我需要从控制器返回的字段。以下是代码示例:

    [Queryable(ResultLimit = 30)]
    public IQueryable<dynamic> Get()
    {
        return _db.Leads.Select(x => new
                                    {
                                        x.FirstName,
                                        x.LeadTypeID,
                                        x.DateSent
                                    }).AsQueryable();
    }

当我通过我的应用程序或终端调用 api 时,结果或返回正确。但是,当我将 url 粘贴到浏览器 (Chrome) 中时,出现服务器 500 错误。猜测 XML 而不是 JSON 错误。它在添加关系之前起作用。我想解决上一个问题,但这并不重要。关注的领域是数据被返回,但我的 OData 过滤器被忽略了。

您的帮助将不胜感激。

4

1 回答 1

1

内置的 XML 序列化程序不支持匿名类型,这就是您遇到运行时异常的原因。有 3 种方法可以解决这个问题:

  1. 创建自定义 POCO 以返回而不是您的匿名类型。
  2. 您可以删除 XML 序列化程序并让您的应用程序始终返回 JSON。GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();您可以通过在 global.asax.cs 文件的 Application_Start() 方法中添加:来禁用序列化 程序。
  3. 您可以选择支持匿名类型的不同 XML 序列化程序。我不知道任何手头,但我敢肯定那里有一些。
于 2012-10-03T19:15:36.250 回答