ASP.NET WEB API序列化:最佳实践
本文关键字:最佳 序列化 NET WEB API ASP | 更新日期: 2023-09-27 17:58:50
我有一个带有实体框架的ASP.NET WEB API v2项目,当我调用路由时
// GET api/People
我有一个json序列化错误。
所以,我有一个人民实体:
public People()
{
public int Id { get; set; }
public string Name{ get; set; }
....
....
public virtual ICollection<Role> Role{ get; set; }
public virtual ICollection<Device> Device { get; set; }
}
控制器:
// GET api/People
public IEnumerable<People> GetPeople()
{
var p = db.People.ToList<People>().ToList();
return p;
}
在调试中,p计数了7个元素,这是正确的,但我在序列化中有一个错误。我认为问题出在藏品的装载上。
在WebApiConfig.cs中,我放入了以下代码:
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling= Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
那么,在web api中序列化复杂实体的最佳实践是什么呢?我必须返回一个匿名类型,而不是整个People对象?
错误为:
{"$id":"1","Message":"An error has occurred.","ExceptionMessage":"The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.","ExceptionType":"System.InvalidOperationException","StackTrace":null,"InnerException":{"$id":"2","Message":"An error has occurred.","ExceptionMessage":"Error getting value from 'Tessera' on 'System.Data.Entity.DynamicProxies.Tag_0E0771BC33ADE7B095FF6A8E8DC8501A7DB9907E6F3C703A4EDC71C83D881122'.","ExceptionType":"Newtonsoft.Json.JsonSerializationException","StackTrace":" in Newtonsoft.Json.Seria.......
默认情况下,这将返回json,除非您将text/xml
指定为请求接受头
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);