gpt4 book ai didi

asp.net-mvc - 将 JSON.NET JObject 转换为 JsonResult 的异常

转载 作者:行者123 更新时间:2023-12-04 10:11:50 24 4
gpt4 key购买 nike

我有一个 JSON.NET JObject,其数据结构如下:

{
"foo" : {
"bar": "baz"
}
}

我正在尝试将其转换为 ASP.NET MVC JsonResult,如下所示:
JObject someData = ...;
JsonResult jsonResult = Json(someData, "application/json", JsonRequestBehavior.AllowGet);

当我这样做时,我得到以下异常:

InvalidOperationException was unhandled by user code. Cannot access child value on Newtonsoft.Json.Linq.JValue.



我有一个解决方法,我可以遍历 JObject 的所有属性,并将它们解析为一个通用对象,如下所示:
JsonResult jsonResult = Json(new { key1 = value1, key2 = value2, ... });

但是,这似乎容易出错,并且像是解决此问题的不必要的非通用方法。有什么方法可以更有效地做到这一点,希望使用 JSON.NET 或 ASP.NET MVC 中的一些内置方法?

最佳答案

如果您有 JObject,我建议您编写自定义 ActionResult它使用 JSON.NET 直接将此 JObject 序列化到响应流中。它更符合 MVC 模式的精神:

public ActionResult Foo()
{
JObject someData = ...;
return new JSONNetResult(someData);
}

在哪里:
public class JSONNetResult: ActionResult
{
private readonly JObject _data;
public JSONNetResult(JObject data)
{
_data = data;
}

public override void ExecuteResult(ControllerContext context)
{
var response = context.HttpContext.Response;
response.ContentType = "application/json";
response.Write(_data.ToString(Newtonsoft.Json.Formatting.None));
}
}

拥有一个 JObject 似乎有点矫枉过正,您可以使用 .NET JavaScriptSerializer 将其序列化为 JSON,后者更常与某些模型类结合使用。

关于asp.net-mvc - 将 JSON.NET JObject 转换为 JsonResult 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5572608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com