繁体   English   中英

如何阻止MVC4 ApiController序列化实体框架导航属性?

[英]How do I prevent an MVC4 ApiController from serializing Entity Framework Navigation Properties?

我有一个与Entity Framework对象一起使用的ApiController。 我试图在GET请求上返回的特定对象有几十个导航属性。

当我返回EF对象列表时,它会序列化所有导航属性 ,这会导致序列化对象的时间过长,

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

        return EFObject;

    }

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

我试过这个并没有用。

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

通过使用视图模型,然后让控制器操作返回此视图moedl而不是域模型。 视图模型将专门定义为仅包含所需的属性。 您可能还会发现AutoMapper对于您的域模型和视图模型之间的映射非常有用。

最佳做法是始终从您的方法公开视图模型,并且永远不要让您的域实体在这些方法之外可见。 您将从此方法中获得的另一个好处是,您的API可以适应您的域模型中的更改,并且可以在不破坏现有客户端的情况下完成此操作。

您可以尝试[XmlIgnore]属性。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM