我有一个HTML表视图,其中行是动态创建的。 将表数据发送到控制器和放大器的最佳方法是什么?更新模型? 目前,我已将表转换为JSON,如下所示:
{"0": ["Job Code","Hours","Rate","Expense"],"1": ["a1","b1","c1","d1"],"2": ["a2","b2","c2","d2"]}
我尝试使用newtonsoft JSON反序列化方法,但它失败了。
我认为它无法转换此格式的JSON。
是否有其他方法可以序列化newtonsoft JSON接受的表?
答案 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