1

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

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

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

        return EFObject;

    }

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

我已经尝试过,但它没有用。

4

2 回答 2

2

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

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

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

于 2013-02-21T21:15:27.177 回答
1

你可以试试这个[XmlIgnore]属性。

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

var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
xml.UseXmlSerializer = true;
于 2013-02-21T23:14:11.627 回答