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 对象在开机自检到 C# 时为空

首先,

我建议您以 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. 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; }
}