1

有很多 json 序列化/反序列化选项,所以我不确定哪一个是正确的,以及为什么有这么多选项可以做看似相同的事情。我见过 JsonConvert、JsonSerializer、JavaScriptSerializer 和其他几个。

寻求有关正确将 json 数组反序列化为 ac# 复杂对象列表的帮助。

查询:

 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; }
    }
4

2 回答 2

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) {

        }
    });

您已经userlist在 json中进行了设置,ul因此只需将其直接分配给数据,无需再次包装,还要在 ajax 设置中设置userlistcontentType 。content-Type: 'application/json; charset=utf-8'

同样在您的操作中,只需使用:

    public ActionResult AddUsers(List<User> userlist)
    {
     //no need to do JavaScriptSerializer 
于 2013-07-11T16:00:39.380 回答
1

更改您的操作以接受用户列表,模型绑定器将处理其余部分,如下所示:

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

更改 javascript 以直接发送 users 数组,无需代理属性:

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

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

        }
    });
于 2013-07-11T16:07:55.413 回答