MVC如何接收来自JSON的对象数组?

时间:2012-02-13 17:07:02

标签: javascript json object asp.net-mvc

我正在尝试将一个对象数组发送到我的控制器,但遇到了一些困难。

它正在发送数组,当传送到控制器时,数组的对象数也似乎正常。 但是如果您要查看对象内部对象的所有属性都是null

怎么可能?

JavaScript的:

function callme(results) {
        for (var i = 0; i < results.length; i++) {
            var endRes = {
                Id: results[i].id,
                Icon: results[i].icon
            };
            jsonObj.push(endRes);
        }
        sendPackage(jsonObj);
}

function sendPackage(jsonObj) {
    $.ajax({
        type: "POST",
        url: '../../Home/RegisterList',
        data: { List: jsonObj },
        cache: false,
        dataType: "json",
        error: function (x, e, data) {
                alert(data);
        }
    });
}

控制器:

[HttpPost]
public JsonResult RegisterList(ICollection<DetailsModel> List)
{
    foreach (var i in List) ....... // other process will be here
    ............................... // other process will be here
    return Json(new { message = "OK" });
}

型号:

public class DetailsModel
{
    public string Id { get; set; }
    public string Icon { get; set; }
}

2 个答案:

答案 0 :(得分:4)

好的我昨晚通过使用Newton的JSON.NET解决了这个问题(你可以从NuGet获得)。我已经对数组进行了字符串化并将其作为控制器的字符串接收。最后,我使用json.net将此字符串转换(反序列化)为集合。

要字符串化:使用相同的代码,但使用以下命令更改json请求的数据部分:

data: { List : JSON.stringify(jsonObj) }

最后收到:

using Newtonsoft.Json;
public JsonResult RegisterList(string List)
        {
            ICollection<DetailsModel> jsonModel = JsonConvert.DeserializeObject<ICollection<DetailsModel>>(List);
        }

瞧;你有一个名为jsonModel的集合!

答案 1 :(得分:3)

不幸的是,列表的模型绑定在MVC中并不那么好看。看到: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

以这种方式传递列表:

数据:{“List [0] .Id”:“1”,“List [0] .Icon”:“test”}