2014-02-13 2 views
-1

Json.Net에서 Client로 직렬화 할 때 객체의 'type'을 포함시킬 수있는 최근 문제가 해결되었습니다. 그 이유는 내가 앞뒤로 보내는 클래스는 BaseClass에서 4 개의 서브 클래스로 유형화 된 속성을 가지고 있기 때문입니다. 이제는 클라이언트가 Json의 type 속성을 사용하여 각 클라이언트를 올바르게 표시하고 있습니다.Json.Net을 MVC, API가 아닌 기본 포맷터로 사용

이제 API 컨트롤러가 아닌 컨트롤러로 개체를 보내야합니다. Json.Net을 기본 JsonFormatter로 사용하는 API 컨트롤러에 대한 게시물을 많이 보았지만 일반 MVC 컨트롤러에서는 작동하지 않습니다.

내 질문은 .... 어떻게 내 컨트롤러가 기본적으로 Json.Net 직렬화기를 사용하도록 할 수 있습니까? 그리고 ... 이것은 잠재적으로 아약스 전화를 걸고있는 다른 아이템에 문제를 일으킬 것입니까?

내 json을 내 컨트롤러로 문자열로 보낸 다음 JsonConvert를 사용하여 내 개체를 성공적으로 deserialize 할 수 있었기 때문에 완료 될 수 있음을 알았습니다.

의견을 보내 주시면 감사하겠습니다.

편집 : 좋아 는, 그래서 JsonValueProviderFactory을 변경 지시 here을 따라하고 그러나 그것의 원래 문제를 도움이되지, 작동하는 것 같군.

문제는 JsonFormatter가 여전히 오래된 것이며 Json.Net을 사용하지 않는 것입니다. 따라서 ProviderFactory는 사전을 올바르게 작성하고 있지만 객체를 deserialize하려고하면 BaseClass로 캐스트 한 속성 만 가져오고 예상 한 파생 클래스는 가져 오지 못합니다.

해당 부분에 대한 생각?

EDIT : 간단히 말해서 MVC4에서 내 JsonNetMediaTypeFormatter를 어떻게 만듭니 까? ProviderFactory를 변경했지만 각 매개 변수가 해당 값으로 직렬화되는 방식 만 변경됩니다. 내가해야 할 일은 Jason.Net을 사용하여 Hierarchy로 입력 된 매개 변수가 올바른 파생 클래스로 직렬화되도록하는 것입니다. Baseclass로 입력하지 않습니다.

편집 - 마지막 :Ok ... 그래서 ApiController를 호출하면 들어오는 매개 변수와 올바른 하위 클래스가 매핑되는지 확인했습니다. 그래서이 길로 갈 수는 있지만, 저는 정기적 인 컨트롤러로 같은 결과를 얻는 방법을 찾고 싶습니다.

답변

0

동일한 문제가 발생하여 기본 컨트롤러 클래스에서 Json 메서드를 재정의하여 해결했습니다.

EX : 대답에 대한

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior) 
{ 
    var result = new JsonNetResult 
     { 
      Data = data, 
      ContentEncoding = contentEncoding, 
      JsonRequestBehavior = behavior 
     }; 
    return result; 
} 
+0

감사합니다,하지만 난 그 작업을 두 가지 다른 방법이 없습니다. 필요한 것은 클래스의 계층 구조를 Deserialize 할 수 있도록 JsonFormatter를 My Controller 호출의 기본 호출로 설정하는 것입니다. –

+0

원본 문제를 오해 한 것 같아요, 당신의 문제가 데이터를 직렬화하는 중이라고 생각하고있었습니다. 들어오는 데이터를 작업 매개 변수에 매핑하는 과정이 모델 바인딩이고,이 대답으로 충분한 정보를 찾을 수 있다고 생각합니다. : http://stackoverflow.com/a/13749124/109456 희망이 도움이됩니다. –

관련 문제