我在尝试将复杂的 JSON 对象传递给 MVC 4 控制器操作时遇到问题。由于 JSON 内容是可变的,我不希望 MVC 将 JSON 的各个属性/元素映射到操作方法的参数列表中的参数。我只想在控制器操作中将数据作为单个 JSON 字符串参数获取。
这是我的操作方法的签名:
[HttpPost]
[ValidateInput(false)]
public string ConvertLogInfoToXml(string jsonOfLog)
这是我从浏览器发布一些 JSON 数据的尝试:
data = {prop: 1, myArray: [1, "two", 3]};
//'data' is much more complicated in my real application
json = {jsonOfLog: data};
$.ajax({
type: 'POST',
url: "Home/ConvertLogInfoToXml",
data: JSON.stringify(json),
success: function (returnPayload) {
console && console.log ("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log ("request failed");
},
dataType: "xml",
contentType: "application/json",
processData: false,
async: false
});
当我在 ConvertLogInfoToXML 方法的开头命中断点时,jsonOfLog 为空。
如果我更改 JavaScript 中设置的 'json' 变量以使 jsonOfLog 属性成为简单字符串,例如:
json = { jsonOfLog: "simple string" };
然后当我在 ConvertLogInfoToXML 方法开头的断点被命中时,jsonOfLog 是字符串的值(例如“简单字符串”)。
我尝试将 action 方法中的 jsonOfLog 参数的类型更改为对象类型:
[HttpPost]
[ValidateInput(false)]
public string ConvertLogInfoToXml(object jsonOfLog)
现在,使用原始 JavaScript 代码(我在其中传递一个更复杂的“数据”对象),jsonOfLog 获取 {object} 的值。但是调试器并没有在监视窗口中显示更多细节,而且我不知道我可以使用什么方法来操作这个变量。
如何将 JSON 数据传递给 MVC 控制器,其中传递的数据是字符串化的复杂对象?
谢谢, 诺特