JSON 对象在开机自检到 C# 时为空
本文关键字:对象 开机自检 JSON | 更新日期: 2023-09-27 18:18:06
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);
}
});
注意事项:
-
contentType: 'application/json'
-
data: 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; }
}