C# 如何防止MVC4 ApicController序列化实体框架导航属性?

C# 如何防止MVC4 ApicController序列化实体框架导航属性?,c#,asp.net-mvc,entity-framework,serialization,asp.net-mvc-4,C#,Asp.net Mvc,Entity Framework,Serialization,Asp.net Mvc 4,我有一个处理实体框架对象的ApiController。我试图在GET请求中返回的特定对象几乎有十几个导航属性 当我返回EF对象列表时,它会序列化所有导航属性,这会导致序列化对象花费大量时间 public IEnumerable<EFObject> Get() { IEnumerable<EFObject> EFObjects= db.EFObject; return EFObject; }

我有一个处理实体框架对象的ApiController。我试图在GET请求中返回的特定对象几乎有十几个导航属性

当我返回EF对象列表时,它会序列化所有导航属性,这会导致序列化对象花费大量时间

    public IEnumerable<EFObject> Get()
    {
        IEnumerable<EFObject> EFObjects=
            db.EFObject;

        return EFObject;

    }
public IEnumerable Get()
{
IEnumerable eObject=
db.eObject;
返回eObject;
}
如何防止MVC序列化这些导航属性

我试过了,但没有成功

如何防止MVC序列化这些导航属性

当然,通过使用视图模型,然后让控制器操作返回此视图moedl,而不是域模型。视图模型将专门定义为仅包含所需的特性。您可能还发现在域模型和视图模型之间进行映射很有用

最佳实践是始终从方法中公开视图模型,并且永远不要使域实体在这些方法之外可见。这种方法的另一个好处是,您的API将对域模型中的更改具有弹性,这可以在不破坏现有客户端的情况下实现。

您可以尝试使用该属性

这在很大程度上取决于技术堆栈的其余部分等。我使用的是WebApi,在WebApiConfig.cs文件中包含此代码,并且忽略了导航属性。我总是返回xml,而不是json

var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
xml.UseXmlSerializer = true;

这是我最初的想法,但我真的希望不必手动指定新类型中的所有属性。我会再挖一点,效果非常好。非常感谢。我做了你的xml.UseXmlSerialize=true;