当我不知道JSON对象名称时,如何在MVC控制器中获取JSON数据

本文关键字:JSON MVC 控制器 获取 数据 对象 我不知道 | 更新日期: 2023-09-27 18:25:00

当我不知道JSON对象名称时,如何在控制器中获取JSON数据?在我的例子中,Json对象是一个对象数组,它们具有已知的属性名称。

例如,如果我有一个黑匣子页面,将JSON发布到我的控制器,而我不知道顶层的JSON对象名称,例如,在下面的例子中,如果"RandomName"可以是任何东西。

<div>
    <input type="button" value="click1" id="click1" />
</div>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
    $(function () {
        $('#click1').click(function (e) {
            //alert('here');
            var jsonObject = {
                "RandomName": [{ "WidgetName": "Cog", "Description": "Blah Blah" }, { "WidgetName": "Bolt", "Description": "Nuts and Bolts" }]
            };
            $.ajax({
                url: "@Url.Action("DoSomething")",
                type: "POST",
                data: JSON.stringify(jsonObject),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                error: function (response) {
                    alert(response.responseText);
            },
                success: function (response) {
                    alert(response);
                }
            });
        });
    });
</script>

我有下面的类,它定义了我的数据结构:

public class MyModel
{
    public List<Widget> widget { get; set; }
}
public class Widget
{
    public string WidgetName { get; set; }
    public string Description { get; set; }
}

当MyModel有一个属性小部件,但我不知道客户端给出的名称时,我应该将什么定义为控制器的参数。这是一个随意的名字。

[HttpPost]
public ActionResult DoSomething(MyModel model)
{   
    return Json("Success");
}

当我不知道JSON对象名称时,如何在MVC控制器中获取JSON数据

字符串化之前,请按摩对象,而不是:

data: JSON.stringify(jsonObject)

用途:

data: JSON.stringify(jsonObject[Object.keys(jsonObject)[0]]) // get rid of the root property

现在请求将如下所示:

[{
    "WidgetName": "Cog",
    "Description": "Blah Blah"
}, {
    "WidgetName": "Bolt",
    "Description": "Nuts and Bolts"
}]

控制器操作现在可以直接采用CCD_ 1参数。

显然,这假设您的jsonObject将始终具有1个属性(您不控制其名称,因为它可能来自其他来源)。