当我不知道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");
}
答案 0 :(得分:1)
在字符串化之前,按摩您的对象而不是:
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"
}]
您的控制器操作现在可以直接使用List<Widget>
参数。
显然,这假设您的jsonObject
将始终拥有1个属性(您无法控制其名称,因为它可能来自其他来源)。