2012-03-12 40 views
0

這裏是我如何調用該方法:字典以JSON C#

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

而且我的方法有以下參數:

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

當我與上面提到的參數調用它,方法是被稱爲但'json'不包含任何內容。它的計數是0.爲什麼發生這種情況?如何解決它?

+0

它會幫助,如果你告訴我們*你怎麼稱呼這個方法... – epoch 2012-03-12 12:05:35

+0

@epoch我通過Fiddler調用它。這些是參數。 – 2012-03-12 12:07:09

回答

1

默認JSON序列不支持這個開箱即用的,但是JSON.NETSystem.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不包含任何內容。 – 2012-03-12 12:08:06

+0

你需要改變類型,方法signatiure需要看起來像這樣:'MyMethod(string email,string json,string timestamp)',之後使用其他答案中提供的代碼 – ntziolis 2012-03-12 12:12:12

+0

我不能那樣做。 – 2012-03-12 12:13:16