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

相關問題