在 ActionResult 中获取 JsonResult

Get JsonResult within ActionResult

提问人:rd1218 提问时间:10/3/2022 更新时间:10/11/2022 访问量:473

问:

我的数据是在 JsonResult 上生成的,其输出如下。

public JsonResult SampleAAA(Guid xxxxx){
    
    //Code ...

    return Json(new
    {
        success = true,
        listA,
        listB,
    }, JsonRequestBehavior.AllowGet);
}

从ActionResult中,我需要调用该JsonResult并获取这些列表。

public ActionResult SampleBBB(Guid xxxxx){

    var result = SampleAAA(xxxx);
    //How can I access 'listA' and 'listB' ?

    //Other code ...

    Return View();
}

如何访问这些列表?我确实看到了内容,但我无法访问这些列表以继续在 Visual Studio 中编写代码。result.Data

C# ASP.NET-MVC 操作结果 JSONRESULT

评论

2赞 DavidG 10/3/2022
您不应该从另一个操作调用一个操作。相反,将生成这些值的代码移动到两个操作都可以调用的方法中。
0赞 rd1218 10/3/2022
这里的想法是:ActionResult 生成 的第一个版本,然后用户可以在前端导航,并将请求发送到提到的 JsonResult。这就是 ActionResult 应该调用 JsonResult 的原因View()AJAX
0赞 Poul Bak 10/4/2022
在将第一个请求发送回客户端后,原始的 jsonresult 早已不复存在。
0赞 rd1218 10/4/2022
@PoulBak 当然,关键是 JsonResult 代码会一次又一次地工作,无需调用 ActionResult 所做的其他所有事情
0赞 Poul Bak 10/4/2022
您可以使用 的属性,但我仍然建议您创建一个返回对象而不是 json 的方法。Json 不擅长“搞砸”来获取数据,除非它被反序列化。ValueJsonResult

答:

0赞 Serge 10/4/2022 #1

你可以试试这段代码

 var result = SampleAAA(xxxx);

 var jsonObject = (JObject)result.Value;

 bool success =  (bool)jsonObject["success"];

使用 JsonResult 要好得多

return new JsonResult(new
    {
        success = true,
        listA,
        listB,
    });

评论

0赞 rd1218 10/11/2022
没有编译。在第二行(不包括第三行),Visual Studio错误为:无法将类型“method”转换为“JObject”
0赞 Arian 10/11/2022 #2

使用 .Net 5+,您可以执行此操作:

using System.Text.Json;

var doc = JsonDocument.Parse(YOUR_JSON);
var property = doc.RootElement.GetProperty("ListA");
0赞 rd1218 10/11/2022 #3

感谢所有回复。经过更多的研究,我设法用下面的代码解决了这个问题。

public ActionResult SampleBBB(Guid xxxxx){

    var result = SampleAAA(xxxx);

    //Steps to have access to those information:
    string stringJson = JsonSerializer.Serialize(result.Data);
    var resultString = JObject.Parse(stringJson);
    var outputA = resultString["listA"].Value<string>();

    //...
    }