是否可以在控制器中从JSON对象更改为JSON数组

时间:2019-05-24 09:44:23

标签: javascript asp.net json asp.net-mvc

我正在使用SlickGrid,并试图在用户按下Enter键时将数据从网格添加到DB。它是sendig和JSON对象(例如{"name":"value"}),由于我使用的类型为“ System.Collections.Generic.List”,因此我需要将其作为数组。是否有可能在控制器中将其更改为JSON数组? 数据是从网格本身获得的。 预先感谢!

我也看到过类似的情况,但是我仍然收到错误提示:

  

Newtonsoft.Json.JsonSerializationException:'无法反序列化当前JSON对象(例如{“ name”:“ value”})为类型'System.Collections.Generic.List`1 [DAL.SlickGridTest]',因为该类型需要JSON数组(例如[1,2,3])正确反序列化。

这是我的行动public ActionResult EditGridEnter(string mydata) 这是我的jquery $.post

grid.onKeyDown.subscribe(function(e) {
  var keyPressed = event.keyCode || event.which;
  if (keyPressed == 13) {
    var myJSON = JSON.stringify(item);
    $.post("/SlickGridTest/EditGridEnter", $("input[name=mydata]").val(myJSON));
  }
});

这是来自项目的:

var idData = jsonResult[key].id + 1;
var item = { "id": idData, "t_nome": "", "t_prof": "", "t_data": "", "t_morada": "", "t_percCompleto": "" };

所有数据都来自slickgrid中的网格

这是我反序列化对象的方式:

var slcgrd= JsonConvert.DeserializeObject<List<SlickGridTest>>(mydata);

我希望以数组的形式获取值(例如[1,2,3]),而我以object ( Object {id: 43, t_nome: "name name", t_prof: "prof", …} )的身份获取

1 个答案:

答案 0 :(得分:1)

因此,您似乎正在尝试反序列化为List<SlickGridTest>。反序列化到列表时,反序列化程序期望看到JSON数组结构。因此,您有两种选择。

发送带有单个项目的数组:

var myJSON = JSON.stringify( [item] );

或将控制器的反序列化更改为期望包含单个项目:

var slcgrd= JsonConvert.DeserializeObject<SlickGridTest>(mydata);