2012-08-24 1 views
4

이것은 매우 간단한 웹 API 프로젝트입니다. 데이터 모델, 생성 된 DbContext 및 컨트롤러가 있습니다.특정 속성이 직렬화되지 않도록 [JsonIgnore]를 어디에 추가해야합니까?

내 모델 클래스의 특정 속성에 [JsonIgnore] 특성을 추가 한 다음 나중에 데이터 모델을 변경하면 모델 클래스가 재생성되고 내 [JsonIgnore] 특성이 삭제됩니다. 나는 이것이 왜 발생하는지 자동 생성 클래스에 속성을 추가해서는 안된다는 것을 이해합니다. 내 질문은 ASP.NET 웹 API와 함께 사용하기 위해 [JsonIgnore]과 같은 클래스에 속성으로 주석을 추가해야하는 곳입니까?

ASP.NET 웹 API 4, RTW

답변

5

뷰 모델을 사용해야합니다. 기본적으로 노출 할 필요가있는 특성 만 포함하는 클래스를 정의한 다음 웹 API 조치에서 해당 뷰 모델을 리턴하십시오. 이런 식으로 [JsonIgnore] 속성을 사용하여 도메인 모델을 오염시키는 것에 대해 걱정할 필요가 없습니다. 특히 특정 작업에 대해서만 해당 속성을 무시하지 않으려는 경우가 있습니다. 도메인 모델과보기 모델 간의 매핑을 단순화하기 위해 AutoMapper을 살펴보십시오.

2

매우 간단한 웹 API 프로젝트를 만들고 있다고 명시 적으로 말하면 간단한 전역 바꾸기로 벗어날 수 있습니다. ASP.NET Web API를 사용하도록 프로젝트를 변환하는 동안 동일한 문제가 발생했습니다. 필자는 데이터베이스 스키마를 정기적으로 변경했기 때문에 래핑되는 데이터의 속성이 끊임없이 변하기 때문에 동적 또는 강력한 형식의 뷰 모델보다는 원래 형식을 반환하는 것이 더 쉬웠습니다.

직렬화를 위해 무시해야하는 속성은 EF에서 생성 한 모든 탐색 속성 일 수 있습니다. 또한 이러한 모든 속성은 가상입니다. 나는 public virtual을 모두 [Newtonsoft.Json.JsonIgnore] public virtual으로 바꾼 파일 (내 데이터 라이브러리 프로젝트에만 범위 지정)에서 대체했습니다.

프로젝트가 아직 개발 중일 때 테스트 할 수있는 빠르고 쉬운 수정. 결국에는 EF 모델을 뷰 모델로 랩핑해야하지만,이 간단한 방법을 사용하면 더 이상 오랫동안 작업하지 않고도 계속 작업 할 수 있습니다.

관련 문제