2012-06-18 2 views
4

핸드 헬드 장치와 함께 사용하기 위해 기존 데이터베이스를 노출하기 위해 ASP.Net 웹 API를 만들었습니다. 나는 웹 API, EF 및이 프로젝트에서 사용하려고하는 다른 모든 것들도 비교적 새로운 것입니다. :).Net 웹 API - 엔티티 프레임 워크 - 직렬화 중에 관계를 무시하십시오.

결과 데이터 전송을 최대한 가볍게하고 싶지만 API가 객체를 반환하면 직렬화 된 JSON에는 자체적으로 'EntityKey'필드가 있고 객체와 관계가있는 다른 테이블의 행이 있습니다.

이제 모델 코드 생성에 ADO.NET DbContext Template Generator를 사용하려고합니다. 이것은 EntityKey 필드를 제거하지만 여전히 JSON에 나타나는 관계가 있습니다.

모두 개체의 필드를 직렬화하고 삽입 및 업데이트를 위해 JSON을 이러한 개체로 deserialize 할 수 있어야합니다. 이 작업을 수행 할 수있는 기본 제공 방법이 있습니까?

내 최선의 방법은 무엇입니까? 당신의 반환 값 "을 선택"새로운 유형의 당신은 당신에게 더주고 쉽게 할 수있는 몇 가지 예제 코드를 게시 할 경우 다음 당신이

을 반환 할 값입니다

return ienumfromedmx.Select(o=> new { id = id, value = value, name = name}); 

에서

답변

3

관련 코드 예제

public Book GetBook(int id) { return books.SingleOrDefault(b => b.Id == id);} 

채널을 사용하여 당신이 있다면

public JsonResult GetBook(int id){ 
return Json(books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title = Title, price = Price})); 
} 

주 - (I 오히려 JsonResult보다 API에 대한 동적 또는 개체를 사용하는 거라고 참조 위해)

public dynamic GetBook(int id){ 
return books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title = Title, price = Price}); 
} 

또는

public object GetBook(int id){ 
return books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title = Title, price = Price}); 
} 

OR에 플랜지 를 사용하여

public JsonResult GetBook(int id){ 
return Json(books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title = Title, price = Price})); 
} 

그리고 http를 사용하는 경우 게시 반대로, 당신은

public JsonResult GetBook(int id){ 
return Json(books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title = Title, price = Price},JsonRequestBehavior.AllowGet); 
} 
+0

: 를 '공용 클래스 Book { public int Id {get; 세트; } public string Name {get; 세트; } public decimal Price {get; 세트; }} 컨트롤러 : '(=> b.Id == ID b) 공중 예약 GetBook (INT 아이디) { 복귀 books.SingleOrDefault; } ' 익명 형식을 반환 할 수 있도록 컨트롤러 메서드를 어떻게 변경합니까? –

+0

반환 형식을 동적으로 변경 public static GetBook (int id) 또는 공개 객체 GetBook (int id)도 작동합니다. –

+0

죄송합니다. JsonResult는 API가 아닌 표준 MVC를위한 것입니다. 추가 한 후에 기억합니다. 우리는 API에 대해 이야기하고있었습니다. 도움이 되었다면 그것을 제거하고 싶지 않았습니다. –

2
를 사용해야 할 것 얻을 것은 게으른 로딩을 해제

당신이 명시 적으로 Include 호출을로드하지 않는 한 방법은 관계를 반환하지 않습니다에 대한 그래서

dbContext.Configuration.LazyLoadingEnabled = false; 
// now load your data and return them to serialization 
+0

이것은 세션 동안 지속됩니까? 또는 컨텍스트 인스턴스가 삭제 될 때까지? – seebiscuit

관련 문제