我只想知道为什么.NET必须将参数名称与JSON对象的键名进行匹配?
快速代码预览在这里…
var json = { "service": "COMMON", "method": "MENU_SUBLIST", "UID": "1000007", "ULID": "stackoverflow", "UNM": "queston", "SITE": "1", "DEPT": "2", "LANG": "ko", "MENUID": "0000", "STEPMENU": "", "ACTIONNAME": "" }
好的,让我们通过Ajax在控制器中调用一个动作。
$.ajax({ type: "POST", url: "DATACRUD.json", data: JSON.stringify(json), contentType: "application/json; charset=utf-8", dataType: "json", async: false, //_async, success: function (result) { } });
还有我的C#动作代码。
[HttpPost] public ActionResult DATACRUD(string jsondata) { return Json(new{ fromMVC = jsondata}); } // Just example.
jsondata在此处为null, 因为我与键名不匹配。
为了使DATACRUD获取JSON数据,我必须这样做。
{ jsondata : { "service":"COMMON", "method":"MENU_SUBLIST", "UID":"1000007", "ULID":"stackoverflow", "UNM":"queston", "SITE":"1", "DEPT":"2", "LANG":"ko", "MENUID":"0000", "STEPMENU":"", "ACTIONNAME":"" } }
在这里,问题1 为何我必须将键名与参数名匹配?
就是吗?一定有原因,我想知道为什么。
我想做的是…
{ "service":"COMMON", "method":"MENU_SUBLIST", "UID":"1000007", "ULID":"stackoverflow", "UNM":"queston", "SITE":"1", "DEPT":"2", "LANG":"ko", "MENUID":"0000", "STEPMENU":"", "ACTIONNAME":"" }
将此JSON数据传递到操作中,我在上面指定了DATACRUD
我希望DATACRUD操作采取JSON数据并使用它,无论键名是什么。
还有另一个答案。答案是为JSON数据创建一个模型并将其作为模型类型接收,并以字符串形式获取模型。
但是在我的应用程序中无法定义模型。它可能会导致一百个模型的创建。
因此,在制作模型后接收JSON数据是我最后需要做的事情。
在这种情况下,我该怎么办?
不允许键名匹配。
不允许生成模型。
不允许使用第三方框架。
我认为可能的答案缩小到几个。
我该怎么办?
基于MVC控制器发布:从HTTP正文获取JSON对象? 您的操作应为:
[HttpPost] public ActionResult DATACRUD() { Stream req = Request.InputStream; req.Seek(0, System.IO.SeekOrigin.Begin); string json = new StreamReader(req).ReadToEnd(); return Json(new { fromMVC = json }); }