2012-08-24 87 views
4

這是一個非常簡單的Web API項目。我有一個數據模型,生成DbContext和一個控制器。我應該在哪裏添加[JsonIgnore]來防止某些屬性被序列化?

當我將[JsonIgnore]屬性添加到我的模型類的某些屬性上,然後再對數據模型進行更改時,將重新生成模型類,並刪除我的[JsonIgnore]屬性。我明白爲什麼會發生這種情況,並且我不應該將屬性添加到自動生成的類中。我的問題是,我應該在哪裏註釋具有屬性的類,如用於ASP.NET Web API的[JsonIgnore]

ASP.NET Web API 4,RTW

回答

5

您應該使用視圖模型。基本上定義的類只包含需要公開的屬性,然後從Web API操作中返回這些視圖模型。這樣,您不必擔心使用[JsonIgnore]屬性污染域模型,特別是如果您不希望僅在某些操作時忽略這些屬性。爲了簡化域模型和視圖模型之間的映射,您可以查看AutoMapper

2

因爲您明確表示您正在創建一個非常簡單的Web API項目,您可能可以通過一個簡單的全局替換來脫身。當我將一個項目轉換爲使用ASP.NET Web API時,我遇到了同樣的問題。由於我經常更改數據庫模式,因爲被包裝數據的屬性不斷變化,所以返回原始類型而不是動態或強類型視圖模型更容易。

序列化需要忽略的屬性恰好是由EF生成的所有導航屬性。這也是所有這些屬性都是虛擬的。我在文件中進行了替換(僅限於我的數據庫項目),用[Newtonsoft.Json.JsonIgnore] public virtual替換了所有public virtual

一個快速簡單的修復方法,允許在項目尚在開發過程中進行測試。我同意最終你應該將EF模型包裝到視圖模型中,但是這種簡單的方法可以讓你在沒有它們的情況下繼續工作更長時間。