2012-10-04 58 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