JSON对象在使用JsonResult返回时序列化为空括号
我使用ASP.NET MVC 5在.NET Framework中运行。我有一个MVC控制器使用Newtonsoft.Json
(或json.net)构建一个漂亮的JSON对象。我遇到麻烦的是,当我返回使用JsonResult
方法Json(JSONdotnetObject)
我的JSON,我结束了与具有相同的结构,我期望,但一切都是空谈JArrays
像这样的结果:JSON对象在使用JsonResult返回时序列化为空括号
预期:
{
"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 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
类如图詹姆斯·牛顿 - 王的博客文章,ASP.NET MVC and Json.NET。
这对我来说非常合适。感谢您的快速简单的解释和代码片段。 –
很高兴我能帮到你。 –
你需要添加一些代码,以便我们可以看到你在做什么 – JSON
会做。我将添加一些基于代码的基本实现。 –
如果它是空的,我们需要看看你是如何填充对象。 – Amy