2013-04-09 2 views
2

내 웹 API에서 개체의 특정 속성을 동적으로 필터링 할 수 있도록 사용자 지정 IContractResolver를 구현했습니다. 예를 들어 GetEmployees 액션은 반환 된 각 직원의 "Id"속성을 필터링합니다.웹 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

그래서 데이터베이스에서 요청한 직원을 반복하여 반환 할 특수 오브젝트의 새 목록을 만드시겠습니까? –

+2

예. 특별한 경우에는 특수 데이터 객체. 개인적으로 나는 어쨌든 (비록 그들이 POCO이든 관계없이) 직접 데이터베이스 객체를 반환하는 팬이 아니며, DTO 객체로부터 객체를 분리합니다. – JustAnotherUserYouMayKnow

관련 문제