我的要求是将二维数组传递给控制器,然后在控制器中再次将参数字符串转换为二维数组或列表/数据表。因此,作为参考,我提供了描述如何将值传递给控制器的代码。但是在控制器中,我无法将字符串参数转换为列表/数据表。
var rowData = {};
rowData [0]["PK"] = "1234";
rowData [0]["index"] = 1;
rowData [1]["PK"] = "2345";
rowData [1]["index"] = 2;
$.ajax({
type: "POST",
url: "Test/TestAction",
data: JSON.stringify({
'ID': JSON.stringify(rowData)
}),
dataType: "json",
async: false,
MVC控制器代码
在控制器中,我收到ID格式为波纹管的
{"0":{"PK":238484,"index":1},"1":{"PK":238506,"index":2}}
但是在控制器中,我无法将此字符串参数转换为list / datatable。
public ActionResult TestAction(string ID){
}
谢谢。
答案 0 :(得分:0)
您的数据将序列化为一个对象,或者根据需要序列化为关联数组。可以在服务器端将其反序列化为Dictionary
。您可以使用JsonConvert.DeserializeObject
手动进行此操作,但是为什么不让Modelbinder进行工作呢?
public class Item
{
[JsonProperty("PK")]
public string PrimaryKey { get;set; }
[JsonProperty("index")]
public int Index { get;set; }
}
public ActionResult TestAction(IDictionary<string, Item> items){
var asEnumerable = items.Select(x => x.Value);
....
}
顺便说一句,如果使用数组而不是对象,则将直接获得一个列表:
var rowData = [];
rowData.push( { PK:"1234", index: 1} );
rowData.push( { PK:"2345", index: 2} );
在服务器端:
public ActionResult TestAction(IList<Item> items){
...
}
至少,不要使用asnyc: false
,因为它已被弃用,并将很快有一天被移除。
答案 1 :(得分:0)
var ObjectName= JsonConvert.DeserializeObject<Person>(JSONString);
为了安装JSON.NET,请转到“管理NuGet软件包...”并搜索JSON.NET或Newtonsoft.JSON。您也可以通过Package Manager控制台安装它: 您还可以从here了解更多信息。