C# 未能序列化ASP.NET Web API中的响应正文

C# 未能序列化ASP.NET Web API中的响应正文,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我正在使用ASP.NET Web API,只是试图从我的数据库返回一些数据,但我一直遇到以下错误: 'ObjectContent'1'类型未能序列化内容类型'application/xml'的响应正文;字符集=utf-8' 我曾尝试将以下内容添加到Global.asax文件中,正如其他类似问题中所建议的那样,但它所做的只是更改错误的格式 GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Re

我正在使用ASP.NET Web API,只是试图从我的数据库返回一些数据,但我一直遇到以下错误:

'ObjectContent'1'类型未能序列化内容类型'application/xml'的响应正文;字符集=utf-8'

我曾尝试将以下内容添加到Global.asax文件中,正如其他类似问题中所建议的那样,但它所做的只是更改错误的格式

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter)

我的控制器如下所示:

public class SQLController : ApiController
{
    public IEnumerable<Alias> Get()
    {
        using (DatabaseEntities entities = new DatabaseEntities())
        {
            return entities.Aliases.ToList();
        }
    }

    public Alias Get(int id)
    {
        using (DatabaseEntities entities = new DatabaseEntities())
        {
            return entities.Aliases.FirstOrDefault(a => a.ID == id);
        }
    }
}
公共类SQLController:ApiController
{
公共IEnumerable Get()
{
使用(DatabaseEntities=新DatabaseEntities())
{
返回entities.alias.ToList();
}
}
公共别名Get(int-id)
{
使用(DatabaseEntities=新DatabaseEntities())
{
返回entities.alias.FirstOrDefault(a=>a.ID==ID);
}
}
}

我用一个简单得多的数据库尝试了类似的方法,效果很好。我还读到,制作一个单独的数据模型可以解决这个问题?如果是这样的话,为什么,我将如何着手这样做?如果您能帮我弄清楚我为什么会收到这个错误,我们将不胜感激。

看来实体框架延迟加载相关实体并创建无休止的循环是个问题

最好禁用延迟加载并手动加载相关对象。 可以对整个上下文全局禁用延迟加载,仅对某些关系禁用,甚至对每个查询禁用本地加载

全球:

public class BloggingContext : DbContext 
{ 
    public BloggingContext() 
    { 
        this.Configuration.LazyLoadingEnabled = false; 
    } 
}
本地:

using (DatabaseEntities entities = new DatabaseEntities())
{
    entities.Configuration.LazyLoadingEnabled = false;
    return entities.Aliases.FirstOrDefault(a => a.ID == id);
}
如果要禁用特定属性,只需从导航属性中删除virtual:

public class Blog 
{  
    public int BlogId { get; set; }  
    public string Name { get; set; }  
    public string Url { get; set; }  
    public string Tags { get; set; }  

    public ICollection<Post> Posts { get; set; }  
}
公共类博客
{  
public int BlogId{get;set;}
公共字符串名称{get;set;}
公共字符串Url{get;set;}
公共字符串标记{get;set;}
公共ICollection Posts{get;set;}
}
有关这方面的更多信息,请参阅官方的micrsofot文档

对返回类型使用“IHttpActionResult”

[HttpGet]   
public IHttpActionResult Get()
{
    using (DatabaseEntities entities = new DatabaseEntities())
    {
        return Ok(entities.Aliases.ToList());
    }
}

public IHttpActionResult Get(int id)
{
    using (DatabaseEntities entities = new DatabaseEntities())
    {
         return Ok(entities.Aliases.FirstOrDefault(a => a.ID == id));
    }
}

尝试添加config.Formatters.Remove(config.Formatters.XmlFormatter);到你的webapiconfig.cs,如果有用的话,我会发布一个正确的答案。这个答案我正在寻找,非常有用