1

我有一个带有 HTML 表的视图,其中行是动态创建的。将表数据发送到控制器并更新模型的最佳方式是什么?目前,我已经将表格转换为JSON,如下图:

 {"0": ["Job Code","Hours","Rate","Expense"],"1": ["a1","b1","c1","d1"],"2": ["a2","b2","c2","d2"]}

我尝试使用 newtonsoft JSON 反序列化方法,但失败了。

我认为它无法转换这种 JSON 格式。

有没有其他方法可以序列化 newtonsoft JSON 接受的表?

4

1 回答 1

1

JSON 中的 {} 告诉反序列化器它将创建一个对象。记住这一点,您创建的 JSON 将创建一个对象 - 每个属性都包含一个字符串数组。似乎您想要一个对象列表,而不是这个。

你是用这种方法反序列化的吗?

JsonConvert.DeserializeObject<T>(json)

您需要提供一种类型来反序列化。所以在这种情况下,它将是:

class JobDetails
{
    public string JobCode { get; set; }
    public double Hours { get; set; }
    public double Rate { get; set; }
    public double Expense { get; set; }
}

为了反序列化为这种类型,您的 JSON.NET JsonConvert 调用将如下所示:

    [HttpPost]
    public ActionResult Testing(string json)
    {
        var list = JsonConvert.DeserializeObject<List<JobDetails>>(json)
        UPDATE_YOUR_MODEL_HERE(list);

        return WHAT_YOU_WANT_TO_RETURN_HERE;
    }

你的 JSON 看起来像:

[
    {
        "JobCode": "a1",
        "Hours": 37.5,
        "Rate": 10,
        "Expense": 375
    },
    {
        "JobCode": "a2",
        "Hours": 10,
        "Rate": 20,
        "Expense": 200
    },
    {
        "JobCode": "a3",
        "Hours": 37.5,
        "Rate": 20,
        "Expense": 750
    }
]

这会将 JSON 转换为 JobDetails 对象列表。

或者,如果您想将 JSON 解析为对象作为 Action 参数,这应该可以解决问题:

    [HttpPost]
    public ActionResult Testing(List<JobDetails> list)
    {
        UPDATE_YOUR_MODEL_HERE(list);

        return WHAT_YOU_WANT_TO_RETURN_HERE;
    }

如果您在将表序列化以纠正 JSON 时遇到问题,请尝试查看此 jQuery 插件:https ://github.com/lightswitch05/table-to-json

于 2013-09-20T13:12:28.797 回答