我使用ASP.NET MVC 5在.NET Framework中运行。我有一个使用Newtonsoft.Json
(或json.net)构建一个漂亮的JSON对象的MVC控制器。我遇到的麻烦是当我使用JsonResult
方法Json(JSONdotnetObject)
返回我的json时,我得到的结果与我期望的结果相同但是一切都是空的{{ 1}}像这样:
预期:
JArrays
实际值:
{
"prop": {
... some stuff ...
},
"another prop": {
... more stuff ...
}
}
这是代码:
[
[
... empty ...
],
[
... also empty ...
]
]
这不是确切的结构,但希望它能说明我正在经历的事情。我在VS中逐行完成了该程序,public ActionResult methodName(string input) {
JObject myJSON = new JObject();
// Populate myJSON with children
foreach (Thing thing in ExistingEntityFrameworkCustomClass) {
JObject newChild = new JObject();
// Add some props to newChild using newChild["propName"] = thing.Property
myJSON.Add(newChild.UniqueIdTakenFromEntity.ToString(), newChild);
}
// The JsonResult successfully populates it's Data field with myJSON before returning.
return Json(myJSON, JsonRequestBehavoir.AllowGet);
}
对象正确地将JsonResult
保存在JObject
字段中,但是当它返回时,ASP的序列化出错了。 NET执行导致我失去了我美丽的JSON对象:*(
我已经解决了这个问题,只需从方法中返回JsonResult.Data
而不是JObject
,但这并不理想,因为我必须使用{{1}手动设置响应标头感觉就像一个黑客。
如果您有任何想法或可以使用更多细节,请告诉我。谢谢你的时间。
答案 0 :(得分:4)
问题是MVC Controller类中的Json
方法在内部使用JavaScriptSerializer
(而不是Json.Net),并且不知道如何正确序列化JObject
。请尝试使用Content
方法:
public ActionResult methodName(string input) {
JObject myJSON = new JObject();
// Populate myJSON with children
return Content(myJSON.ToString(), "application/json", Encoding.UTF8);
}
或者,您可以实施自己的JsonNetResult
课程,如James Newton-King的博客文章ASP.NET MVC and Json.NET所示。