C# 保存对象列表与保存对象(来自 JSON)

C# Saving Object List Vs Saving Object (From JSON)

本文关键字:保存 对象 JSON 来自 列表      更新时间:2023-09-26

我有以下工作代码:

类(声明的对象)

public class saveRow
{
    public int proId { get; set; }
    public string proName{get;set;}
}

控制器:

[HttpPost]
public virtual JsonResult SaveRow(saveRow input)
{ /* CODE HERE */}

JavaScript 对象(已发送)

var test = {"proId" : 1, "proName" : "Test"}

JavaScript Ajax Call

 $.ajax({
       type: "POST",
       url: "URL",
       dataType: "json",
       data: test,
       traditional: true,
       success: function (data, status, request) {
           if (data.Error != undefined) {
               alert("System Error: " + data.Error);
               $(row).find('*').attr('disabled', false);
               return;
           }
       },
       error: function (request, status, error) {
           console.log("ERROR");
       }
   });
现在,当我想发送行列表

而不是一次发送一个行列表时,就会出现问题,因此我执行以下操作:

为了测试我拿了相同的对象并完成了

var test2 = []; test2.push(test); test2.push(test);

对象现在看起来像:

[{"proId" : 1, "proName" : "Test"},{"proId" : 1, "proName" : "Test"}]

我的控制器现在看起来像:

  [HttpPost]
    public virtual JsonResult SaveRow(List<saveRow> input)
    { /* CODE HERE */}

还尝试IEnumberable将对象列表作为 JSON 发送时,变量输入始终为 null。

但是每次我通过控制器参数发送此列表时,"input"总是为空。

这是为什么呢?

解决-

public virtual JsonResult SaveRow(saveRow[] input)

并添加了内容类型!使用 JSON.stringify!

试试这个方式:

  • 为列表设置与参数名称"input"相同的包装器名称
  • 设置内容类型
  • 删除繁体并使用 JSON.stringify 来字符串化您的数据。

.JS:

var data = { "input": test2 };
$.ajax({
       type: "POST",
       url: "URL",
       dataType: "json",
       contentType:"application/json; charset=utf-8", //<--Set content Type
       data: JSON.stringify(data), //Set data
       success: function (data, status, request) {
           if (data.Error != undefined) {
               alert("System Error: " + data.Error);
               $(row).find('*').attr('disabled', false);
               return;
           }
       },
       error: function (request, status, error) {
           console.log("ERROR");
       }
   });