You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ActionResult中调用JsonResult并获取返回的listA和listB?

解决匿名对象属性无法直接访问的问题

下面提供三种可行的方案来获取listA和listB:

1. 使用动态类型(dynamic)

直接将JsonResult.Data转换为dynamic类型,即可直接访问匿名对象的属性:

public ActionResult SampleBBB()
{
    var jsonResult = SampleAAA() as JsonResult;
    if (jsonResult?.Data == null)
    {
        // 处理空值情况
        return View();
    }
    
    dynamic resultData = jsonResult.Data;
    var listA = resultData.listA;
    var listB = resultData.listB;
    
    // 后续对listA和listB的处理逻辑
    return View();
}

这种方式最简单,但缺点是没有编译时类型检查,若属性名拼写错误,只会在运行时抛出异常。

2. 通过反射获取属性值

利用反射读取匿名对象的属性值,适合无法使用动态类型的场景:

public ActionResult SampleBBB()
{
    var jsonResult = SampleAAA() as JsonResult;
    if (jsonResult?.Data == null)
    {
        // 处理空值情况
        return View();
    }
    
    var dataType = jsonResult.Data.GetType();
    var listA = dataType.GetProperty("listA")?.GetValue(jsonResult.Data);
    var listB = dataType.GetProperty("listB")?.GetValue(jsonResult.Data);
    
    // 后续处理逻辑
    return View();
}

反射的性能略差,且代码可读性不强,仅作为备选方案。

3. 定义强类型模型(推荐)

最稳妥的方式是提前定义一个匹配返回结构的强类型模型,替换匿名对象,这样既能获得编译时检查,也能提升代码可读性:

第一步:定义模型类

// 根据实际业务替换YourTypeA和YourTypeB为具体类型
public class SampleResponseModel
{
    public bool success { get; set; }
    public List<YourTypeA> listA { get; set; }
    public List<YourTypeB> listB { get; set; }
}

第二步:修改SampleAAA方法返回强类型

public JsonResult SampleAAA()
{
    var response = new SampleResponseModel
    {
        success = true,
        listA = new List<YourTypeA>(), // 填充实际数据
        listB = new List<YourTypeB>()  // 填充实际数据
    };
    return Json(response, JsonRequestBehavior.AllowGet);
}

第三步:在SampleBBB中直接转换访问

public ActionResult SampleBBB()
{
    var jsonResult = SampleAAA() as JsonResult;
    var responseData = jsonResult?.Data as SampleResponseModel;
    
    if (responseData == null)
    {
        // 处理转换失败或空值情况
        return View();
    }
    
    var listA = responseData.listA;
    var listB = responseData.listB;
    
    // 后续处理逻辑
    return View();
}

这种方式是生产环境中最推荐的,能有效避免运行时错误,同时代码更易维护。

内容的提问来源于stack exchange,提问作者rd1218

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:45:35