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

时间:2017-09-05 15:25:43

标签: c# asp.net .net asp.net-mvc-5 json.net

我使用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}手动设置响应标头感觉就像一个黑客。

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

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所示。