JSON 对象在使用 JsonResult 返回时序列化为空括号



我正在使用 ASP.NET MVC 5在.NET Framework中进行操作。我有一个MVC控制器,它使用Newtonsoft.Json(或 json.net)来构建一个漂亮的JSON对象。我遇到的麻烦是,当我使用JsonResult方法Json(JSONdotnetObject)返回我的 json 时,我最终得到的结果与我期望的结构相同,但一切都是空的JArrays如下所示:

预期:

{
"prop": {
... some stuff ...
},
"another prop": {
... more stuff ...
}
}

实际:

[
[
... empty ...
],
[
... also empty ...
]
]

这是代码:

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); 
}

这不是确切的结构,但希望它能说明我正在经历的事情。我已经在 VS 中逐行浏览了程序,JsonResult对象正确地将JObject保存在JsonResult.Data字段中,但是当它返回时,ASP.NET 执行的序列化出现问题,导致我丢失了漂亮的 JSON 对象:*(

我已经通过简单地从该方法返回一个JObject而不是一个ActionResult来解决这个问题,但这并不理想,因为我必须使用Result.ContentType手动设置响应标头,这感觉就像一个黑客。

如果您有任何想法或可以使用更多详细信息,请告诉我。谢谢你的时间。

问题是 MVC 控制器类中的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和 Json.NET 所示。

相关内容

  • 没有找到相关文章

最新更新