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

Pet*_*nen 1 .net c# asp.net json.net asp.net-mvc-5

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

预期的:

{
    "prop": {
        ... some stuff ...
     },
     "another prop": {
         ... more stuff ...
     }
}
Run Code Online (Sandbox Code Playgroud)

实际的:

[
    [
        ... empty ...
    ],
    [
        ... also empty ...
    ]
]
Run Code Online (Sandbox Code Playgroud)

这是代码:

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); 
}
Run Code Online (Sandbox Code Playgroud)

这不是确切的结构,但希望它说明了我正在经历的事情。我已经通过程序一行一行在VS消失,JsonResult对象正确保存JObjectJsonResult.Data现场,但是当它返回时出现错误与ASP.NET执行,是造成我失去了我美丽的JSON对象序列化:* (

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

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

Bri*_*ers 5

问题是JsonMVC Controller类中的方法JavaScriptSerializer内部使用(不是Json.Net),不知道如何JObject正确序列化a 。尝试使用该Content方法:

public ActionResult methodName(string input) {
    JObject myJSON = new JObject();

    // Populate myJSON with children

    return Content(myJSON.ToString(), "application/json", Encoding.UTF8); 
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以实现自己的JsonNetResult类,如 James Newton-King 的博客文章ASP.NET MVC 和 Json.NET 所示