2012-03-12 3 views
0

내가 메서드를 호출하는 방법입니다사전 여기

{"email":"[email protected]","json":{"some1":"some1", "id":1},"yyy":"yyy"} 

을 그리고 내 방법은 이러한 매개 변수가 있습니다

MyMethod(string email, Dictionary<string, object> json, string timestamp){...} 

내가 위에서 언급 한 매개 변수를 호출 할 때, 방법입니다 'json'은 아무 것도 포함하지 않습니다. 그 수는 0입니다. 왜 이런 일이 일어나고 있습니까? 그것을 해결하는 방법?

+0

* 방법 *을 호출하면 도움이 될 것입니다 ... – epoch

+0

@epoch 필자는 이것을 Fiddler를 통해 호출합니다. 그것은 매개 변수입니다. –

답변

1

기본 JSON 시리얼 라이저는하지만, 상자 밖으로 JSON.NET을이 기능을 지원하지 않고 System.Web.Script.Serialization.JavaScriptSerializer 지원이, 비슷한 질문에 대한 답변을 확인하십시오
How can I deserialize JSON to a simple Dictionary<string,string> in ASP.NET?

JSON.NET은의 기본 JSON 시리얼 될 것입니다 ASP.NET 4.5 WebAPI, ASP.NET과 함께 제공되기를 기대할 수 있으므로 MS에서 지원을받습니다.

UPDATE ASP.NET이 제대로 모델을 결합 사용자 정의 모델 바인더가 필요하게하기 위해
:

public class DictionaryModelBinder : IModelBinder 
    { 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var serializer = new JavaScriptSerializer(); 
     var value = controllerContext.RequestContext.HttpContext.Request.Form["json"]; 
     return serializer.Deserialize<Dictionary<string, object>>(HttpUtility.UrlDecode(value)); 
    } 
    } 

를 그리고 위해 Application_Start 방법의 응용 프로그램 모델 바인더에 새로운 모델 바인더를 추가 :

protected void Application_Start() 
    {   
    ModelBinders.Binders.Add(typeof (Dictionary<string, object>), new DictionaryModelBinder()); 
    RegisterRoutes(RouteTable.Routes); 
    } 
+0

@ 그러나 매개 변수 json에는 아무 것도 포함되어 있지 않습니다. –

+0

당신은 타입을 바꿀 필요가 있습니다. 서명 방법은 다음과 같습니다 :'MyMethod (string email, string json, string timestamp)', 나중에 다른 응답에서 제공된 코드를 사용하십시오. – ntziolis

+0

그럴 수 없습니다. –