在控制器中解析二维数组

时间:2018-12-18 14:23:11

标签: jquery asp.net-mvc

我的要求是将二维数组传递给控制器​​,然后在控制器中再次将参数字符串转换为二维数组或列表/数据表。因此,作为参考,我提供了描述如何将值传递给控制器​​的代码。但是在控制器中,我无法将字符串参数转换为列表/数据表。

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){
}

谢谢。

2 个答案:

答案 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了解更多信息。