如何将JSON模型绑定到对象和嵌套列表

本文关键字:对象 嵌套 列表 绑定 JSON 模型 | 更新日期: 2023-09-27 18:16:32

我希望将JSON对象绑定到嵌套在对象中的List。

我有一个包含ConfigurationFunds列表的Category类:

public class Category
{
    public int Id { get; set; }
    public string CountryId { get; set; }
    public string Name { get; set; }
    public List<ConfigurationFund> Funds { get; set; }
    public Category()
    {
        Funds = new List<ConfigurationFund>();
    }
}
public class ConfigurationFund 
{
    public int Id { get; set; }
    public string CountryId { get; set; }
    public string Name { get; set; }
    public ConfigurationFund()
    {
    }
}

用户可以为每个类别选择一些基金,然后我想将一个JSON字符串POST回我的Controller,并让ModelBinder将JSON绑定到对象模型。

这是我的Action方法:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Category category) 
{
    // Categoy.Id & Categoy.CountryID is populated, but not Funds is null
    return Json(true); // 
}
到目前为止,我有这个jQuery:

$('#Save').click(function (e) {
    e.preventDefault();
    var data = {};
    data["category.Id"] = $('#CategorySelector').find(":selected").val();
    data["category.countryId"] = $('#CategorySelector').find(":selected").attr("countryId");
    var funds = {};
    $('#ConfiguredFunds option').each(function (i) {
        funds["funds[" + i + "].Id"] = $(this).val();
        funds["funds[" + i + "].countryId"] = $(this).attr("countryId");
    });
    data["category.funds"] = funds;
    $.post($(this).attr("action"), data, function (result) {
        // do stuff with response
    }, "json");
});

但这不起作用。类别的属性被填充,但List<ConfigurationFund>()没有被填充。

我需要如何修改它才能使其工作?

<

补充信息/strong>

只是要注意,我也试着张贴类别&ConfiguredFunds,它可以工作,类似于下面的内容:

$('#Save').click(function (e) {
    e.preventDefault();
    var data = {};
    data["category.Id"] = $('#CategorySelector').find(":selected").val();
    data["category.countryId"] = $('#CategorySelector').find(":selected").attr("countryId");
    $('#ConfiguredFunds option').each(function (i) {
        data["configuredFunds[" + i + "].Id"] = $(this).val();
        data["configuredFunds[" + i + "].countryId"] = $(this).attr("countryId");
    });
     $.post($(this).attr("action"), data, function (result) {
        // do stuff with response
    }, "json");
});

在下面的Action方法中,ConfiguredFunds被填充,Category也被填充。但是,Category的List 没有被填充。我需要类别&

public ActionResult Edit(List<ConfigurationFund> configuredFunds, Category category)
{
    return Json(true);
}

如何将JSON模型绑定到对象和嵌套列表

我明白了。我只需要修改

data["category.Id"] = $('#CategorySelector').find(":selected").val();
data["category.countryId"] = $('#CategorySelector').find(":selected").attr("countryId");
var funds = {};
$('#ConfiguredFunds option').each(function (i) {
    funds["funds[" + i + "].Id"] = $(this).val();
    funds["funds[" + i + "].countryId"] = $(this).attr("countryId");
});
data["category.funds"] = funds;
$.post($(this).attr("action"), data, function (result) {
    // do stuff with response
}, "json");

:

data["category.Id"] = $('#CategorySelector').find(":selected").val();
data["category.countryId"] = $('#CategorySelector').find(":selected").attr("countryId");
$('#ConfiguredFunds option').each(function (i) {
    data["category.funds[" + i + "].Id"] = $(this).val();
    data["category.funds[" + i + "].countryId"] = $(this).attr("countryId");
});
$.post($(this).attr("action"), data, function (result) {
    // do stuff with response
}, "json");

基本上,我只是指定funds属于Categorydata["category.funds"]