2012-03-12 75 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