2013-07-11 67 views
1

有很多json序列化/反序列化選項,所以我不確定哪一個是正確使用的,以及爲什麼有這麼多選項看起來相同事情。我見過JsonConvert,JsonSerializer,JavaScriptSerializer等等。將json數組反序列化爲ac#列表時出現問題

尋找幫助正確deserializng一個JSON數組到一個複雜的對象的C#列表。

JQUERY:

var users = []; 
    for (var i = 0; i < response.length; i++) 
    { 
     var u = 
     { 
      Id: response[i].id, 
      UserName: response[i].username, 
      FirstName: response[i].first_name, 
      LastName: response[i].last_name  
     }; 
     users[i] = u; 
    } 

    var ul = JSON.stringify({ 'userlist': users}); 
    $.ajax({ 
     type: "POST", 
     url: "/myurl/addusers", 
     data: { 'userlist': ul }, 
     dataType: "json", 
     success: function (response) { 

     }, 
     error: function (xhr, status, error) { 

     } 
    }); 

C#(這不起作用):

 [HttpPost] 
     public ActionResult AddUsers(string userlist) 
     { 
      JavaScriptSerializer ser = new JavaScriptSerializer(); 
      var users = ser.Deserialize<List<User>>(userlist); 
      ... 
     } 

    [Serializable] 
    public class User 
    { 
     public string Id { get; set; } 
     public string UserName { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
    } 
+0

我不確定是否/如何適合MVC但.NET Web API已經爲您執行了所有這些功能。你應該考慮利用這一點。 http://www.asp.net/web-api – Jeff

回答

3

試試這個方法:

var ul = JSON.stringify({ 'userlist': users}); 
    $.ajax({ 
     type: "POST", 
     url: "/myurl/addusers", 
     data: ul , 
     content-Type: 'application/json; charset=utf-8', 
     dataType: "json", 
     success: function (response) { 

     }, 
     error: function (xhr, status, error) { 

     } 
    }); 

你已經是在JSON ul所以設置userlist只需將其直接分配給數據,而不需要再次將其包裝在userlist之上,還要在ajax設置中設置contentType content-Type: 'application/json; charset=utf-8'

在你的行動

而且只需使用:

public ActionResult AddUsers(List<User> userlist) 
    { 
    //no need to do JavaScriptSerializer 
+0

這實際上是我最初的。我再次嘗試了這一點,但是,當AddUsers被調用時,我的用戶列表中的計數爲0。順便說一句,謝謝你指出在jQuery中的錯誤。我糾正了這一點。 – Prabhu

+1

@Prabhu檢查瀏覽器中的網絡控制檯(chrome)以查看數據如何傳出。還要添加'contentType:'application/json; charset = utf-8'',看我的更新 – PSL

+0

謝謝!我認爲contentType是... – Prabhu

1

改變你的行動來接受用戶的列表中,模型綁定會照顧其餘的,像:

[HttpPost] 
     public ActionResult AddUsers(List<User> users) 
     { 
      //use the 
     } 

更改JavaScript來直接發送用戶數組,無需代理屬性:

var ul = JSON.stringify(users); 
    $.ajax({ 
     type: "POST", 
     url: "/myurl/addusers", 
     data: ul , 
     dataType: "json", 
     success: function (response) { 

     }, 
     error: function (xhr, status, error) { 

     } 
    }); 
+0

謝謝。我也嘗試過(類似於PSL的方法),但是當AddUser被調用時,即使ul中有一個項目,我仍然看到0個項目的計數。 – Prabhu