【发布时间】:2016-01-18 21:42:02
【问题描述】:
我在我的 Wep Api 项目中使用实体框架。我的模型是真实的,如下所示:
public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Article> Articles { get; set; }
}
public class Article
{
public int Id { get; set; }
public int BlogId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public virtual Blog Blog { get; set; }
}
上下文是这样的:
public class BloggingContext: DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Article> Articles { get; set; }
}
我在我的 asp.net Web Api 控制器中使用它。
public class BlogController: ApiController{
public IEnumerable<Blog> Get(){
var context = new BloggingContext();
return context.Blogs.ToList();
}
}
我的方法是通过延迟加载获取数据,并序列化为 JSON 数据作为 Web Api 响应。
context.Blogs.ToList() 返回关系数据(我在断点处看到)。
但是 Web Api 结果有错误。
异常消息:
“ObjectContent`1”类型未能序列化响应正文 内容类型'应用程序/json;字符集=utf-8
内部异常:
从“博客”获取价值时出错 'System.Data.Entity.DynamicProxies.Article_D002A1ECE031410435306DCEF780AFF03EBB8BD36DA603662C993107FAEB1917 "ExceptionType": "Newtonsoft.Json.JsonSerializationException
我设置了我的WebApiConfig.cs
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
jsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
【问题讨论】:
标签: c# entity-framework asp.net-web-api