MVC 3:JSON get请求未完全反序列化

时间:2012-10-04 00:07:24

标签: json asp.net-mvc-3

我正在尝试发送GET请求,参数中包含JSON字符串。 看起来像这样:

var params = { "Url": "http://www.asdf.com", "Users": [{ "Name": "Bob" }, { "Name": "Bill"}] };

通过jQuery的get,在服务器端发送查询字符串是这样的:

  

URL = HTTP%3A%2F%2fwww.asdf.com与使用者%5b0%5D%5bName%5D =鲍勃与使用者%5B1%5D%5bName%5D =比尔

问题是,模型获取了URL属性,并且它在users数组中看到2个项目,但是,用户名保持为null。

有没有办法解决这个问题?

编辑:

这是模型:

public class Parameters
    {
        public string Url { get; set; }
        public User[] Users { get; set; }
    }

    public class User
    {
        public string Name { get; set; }
    }

1 个答案:

答案 0 :(得分:3)

您可以 POST JSON数据到您的Action方法,它将正常工作。 MVC3将为JSON输入执行模型绑定。

确保在进行ajax调用时提供 contentType 属性值。

var params = JSON.stringify(  { "Url": "http://www.asdf.com", 
                                "Users": [{ "Name": "Bob" }, 
                                          { "Name": "Bill"}] });
$.ajax({
    url: '@Url.Action("AcceptJson","Home")',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',   
    data: params, 
    success: function (r) {

    }
});

假设你有一个像这样的行动方法

[HttpPost]
public ActionResult AcceptJson(Parameters model)
{
    if (model != null)
    {
        //check properties of model
    }        
    return Content("ha ha! Json works! Do something useful");
}

您的模型绑定将正常工作。 enter image description here