【问题标题】:Is it possible to change from JSON object to JSON array in controller是否可以在控制器中从 JSON 对象更改为 JSON 数组
【发布时间】:2019-05-24 09:44:22
【问题描述】:

当用户按下 Enter 键时,我正在使用 SlickGrid 并试图将数据从网格添加到数据库。它是 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));
  }
});

这是来自 item 的内容:

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", …} )

【问题讨论】:

  • item 中有什么内容?
  • 您的 MVC 操作需要一个字符串,因此您的问题缺少有关 如何 您尝试将该字符串反序列化为所需类型的信息,以及那是什么类型。您也没有描述您要发送的内容(即 JS 代码中 item 的值)
  • @GrafiCodeStudio 更新了代码,现在可以看啦!
  • 那不就是把物品包装成一个数组那么简单吗? var myJSON = JSON.stringify( [item] ); ?
  • ... 还是反序列化单个对象而不是列表? var slcgrd= JsonConvert.DeserializeObject<SlickGridTest>(mydata); ?

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


【解决方案1】:

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

要么发送一个包含单个项目的数组:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多