2013-04-09 43 views
2

我實現了一個自定義IContractResolver,以便可以從Web API動態過濾出對象上的某些屬性。例如,操作GetEmployees將過濾掉每個退回的員工的「Id」屬性。Web API自定義IContractResolver

public IEnumerable<Employee> GetEmployees() 
{ 
    var ignoreList = new List<string> {"Id"}; 
    GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new JsonContractResolver(ignoreList); 
    return db.Employees.AsEnumerable(); 
} 

問題是,在同樣的方法中,我想將合約解析器設置回其默認值。類似這樣的:

public IEnumerable<Employee> GetEmployees() 
{ 
    var defaultContractResolver = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver; 
    var ignoreList = new List<string> {"Id"}; 
    GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new JsonContractResolver(ignoreList); 
    // Serialize object 
    GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = defaultContractResolver; 
    // return serialized object 
} 

實現此目的的最佳方法是什麼?

回答

2

這絕對不是您嘗試它的方式。你將以這種方式運行線程問題。

一種方法可能是將您返回的對象更改爲不包含Id屬性。取而代之的是製作更專業的物體這是我的方式。

或者,您可以直接返回HttpResponseMessage並將內容設置爲任何您喜歡的內容。但是你必須自己處理序列化和內容否定。

+0

因此,循環訪問數據庫中請求的員工並創建要返回的專用對象的新列表? – 2013-04-09 13:16:20

+2

是的。特殊情況下的特殊數據對象。就個人而言,我不是直接返回數據庫對象的粉絲(不管他們是否是POCO),我將這些對象從DTO對象中分離出來。 – JustAnotherUserYouMayKnow 2013-04-09 13:28:24