2012-10-04 32 views
1

我试图发送一个GET请求,JSON字符串在参数中。 看起来是这样的:MVC 3: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属性,它看到了用户的阵列2项,然而,用户名保持为空。

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

编辑:

这是模型:

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

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

你可以发布你的用户模型定义吗? –

+0

只是。看起来像任何复杂类型的属性都没有反序列化。 – Evgeni

+0

您可能会错过@Syju的回答中所建议的'JSON.Stringify()'。 –

回答

3

可以POST JSON数据到你的操作方法,并它会正常工作。 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

+1

POST会工作,但我需要一个GET在这里...我有点想通了 - 我可以URL编码JSON字符串,并将其作为查询字符串,并将其反序列化在服务器上,但如果我可以做到这一点自动线 - 那会更好。 – Evgeni