C# 未能序列化ASP.NET Web API中的响应正文
我正在使用ASP.NET Web API,只是试图从我的数据库返回一些数据,但我一直遇到以下错误: 'ObjectContent'1'类型未能序列化内容类型'application/xml'的响应正文;字符集=utf-8' 我曾尝试将以下内容添加到Global.asax文件中,正如其他类似问题中所建议的那样,但它所做的只是更改错误的格式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
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,如果有用的话,我会发布一个正确的答案。这个答案我正在寻找,非常有用