我有一个与Entity Framework对象一起使用的ApiController。我试图在GET请求上返回的特定对象有几十个导航属性。
当我返回EF对象列表时,它会序列化所有导航属性,这会导致序列化对象的时间过长,
public IEnumerable<EFObject> Get()
{
IEnumerable<EFObject> EFObjects=
db.EFObject;
return EFObject;
}
如何阻止MVC序列化这些导航属性?
我已经尝试了this但它没有用。
答案 0 :(得分:2)
如何阻止MVC序列化这些导航属性?
通过使用视图模型然后让控制器操作返回此视图moedl而不是域模型。视图模型将专门定义为仅包含所需的属性。您可能还会发现AutoMapper
对于您的域模型和视图模型之间的映射非常有用。
最佳做法是始终从您的方法公开视图模型,并且永远不要让您的域实体在这些方法之外可见。从这种方法中获得的另一个好处是,您的API可以适应您的域模型中的变化,这可以在不破坏现有客户端的情况下完成。
答案 1 :(得分:1)
您可以尝试[XmlIgnore]
属性。
很大程度上取决于技术堆栈的其他部分等。我正在使用WebApi并在WebApiConfig.cs文件中使用此代码并忽略导航属性。我总是返回xml,而不是json。
var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
xml.UseXmlSerializer = true;