gpt4 book ai didi

c# - POST 到 C# 时 JSON 对象为空

转载 作者:行者123 更新时间:2023-11-30 13:38:24 24 4
gpt4 key购买 nike

jQuery:

$('#test').click(function () {

var obj = new Object();
var childObj = new Object();

childObj.name = 'dominic';
childObj.age = 22;

obj.children = new Object ({ child : childObj });

console.log(obj);

$.ajax({
url: '@Url.Action("Test")',
type: 'POST',
data: obj,
dataType: 'json',
success: function (msg) {
//console.log(msg.status);
}
});

});

C#(MVC 4):

public JsonResult Test(testObj obj)
{
foreach (childObj child in obj.children)
{
Debug.Print(child.name);
Debug.Print(child.age);
}

return Json(null);
}

public class testObj
{
public List<childObj> children { get; set; }
}

public class childObj
{
public string name { get; set; }
public string age { get; set; }
}

当我调试时,obj 有一个children 属性,但它始终为空...在我的浏览器控制台中,它不是空...

最佳答案

首先,我建议您将复杂的对象作为 JSON 从客户端发送到服务器:

$.ajax({
url: '@Url.Action("Test")',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(obj),
dataType: 'json',
success: function (msg) {
//console.log(msg.status);
}
});

注意事项:

  1. contentType: 'application/json'
  2. 数据:JSON.stringify(obj)

此外,客户端的 children 属性必须是数组,而不是属性:

var obj = {};
var childObj = {};

childObj.name = 'dominic';
childObj.age = 22;

obj.children = [];
obj.children.push(childObj);

或者简单地说:

var obj = {
children: [
{ name: 'dominic', age: 22 }
]
};

另一条评论:在服务器上,您的 Age 属性定义为字符串,而在客户端上,您将其作为整数 (age: 22) 传递,这是不一致的。除此之外,您不需要将所有 C# 属性都设置为小写。那太可怕了。 JavaScriptSerializer 足够智能,可以遵守标准的 C# 命名约定:

public class TestObj
{
public List<ChildObj> Children { get; set; }
}

public class ChildObj
{
public string Name { get; set; }
public string Age { get; set; }
}

关于c# - POST 到 C# 时 JSON 对象为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17066737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com