将html表数据发送到json并将其发送到mvc控制器列表

时间:2013-09-18 18:55:44

标签: html asp.net-mvc json

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

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

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

我认为它无法转换此格式的JSON。

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

1 个答案:

答案 0 :(得分: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