1

我有一个ApiController与实体框架对象一起使用。我试图在GET请求上返回的特定对象具有几十个导航属性。如何防止MVC4 ApiController序列化实体框架导航属性?

当我回到EF对象的列表,将其序列所有的导航性能,导致时间的荒谬量正在采取序列化对象,

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

     return EFObject; 

    } 

如何防止MVC从序列化这些导航属性?我试过this,它没有工作。

回答

1

您可以尝试[XmlIgnore]属性。

很大程度上取决于其他技术堆栈等。我使用WebApi并在WebApiConfig.cs文件中具有此代码,导航属性将被忽略。我总是返回XML,而不是JSON。

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

这非常奏效。谢谢。我做了你的xml.UseXmlSerialize = true; – Syddraf 2013-02-22 03:13:33

2

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

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

最佳做法是始终在您的方法中显示视图模型,并且绝不会让这些域实体在这些方法之外可见。您将从这种方法中获得的额外好处是,您的API可以适应域模型的变化,并且可以在不破坏现有客户端的情况下完成。

+1

这是我最初的想法,但我真的希望不必手动指定新类型中的所有属性。我会继续挖掘更多。 – Syddraf 2013-02-21 21:59:23

相关问题