如何解析ActionResult的Value中JSON对象并获取totalCount值?
访问OkObjectResult中的totalCount变量的几种方法
针对你遇到的场景,有以下几种可行的方式来获取totalCount的值:
方法一:使用dynamic类型(快速简便)
将Value声明为dynamic类型,直接通过属性名访问:
IActionResult actionResult = await _controller.List(new CancellationToken()); OkObjectResult okResult = actionResult as OkObjectResult; dynamic value = okResult.Value; int totalCount = value.totalCount;
方法二:通过反射获取属性值
如果不想使用dynamic,可以用反射读取属性:
IActionResult actionResult = await _controller.List(new CancellationToken()); OkObjectResult okResult = actionResult as OkObjectResult; var value = okResult.Value; int totalCount = (int)value.GetType().GetProperty("totalCount").GetValue(value);
方法三:定义强类型模型(推荐,代码更安全)
最规范的做法是提前定义一个对应返回结果的模型类,让控制器返回该类型的实例,这样可以直接强类型转换:
1. 定义返回模型类
public class ListResponse { public IReadOnlyList<object> List { get; set; } // 替换为你实际的列表元素类型 public int TotalCount { get; set; } }
2. 修改控制器方法返回该模型
public async Task<IActionResult> List(CancellationToken cancellationToken) { // 业务逻辑获取数据列表和总数量 var dataList = GetYourDataList(); var total = GetTotalCount(); var response = new ListResponse { List = dataList, TotalCount = total }; return Ok(response); }
3. 调用时强类型转换获取值
IActionResult actionResult = await _controller.List(new CancellationToken()); OkObjectResult okResult = actionResult as OkObjectResult; var response = okResult.Value as ListResponse; int totalCount = response.TotalCount;
注意:第三种方法在编译期就能检查类型错误,避免运行时异常,是长期维护代码的最优选择。
内容的提问来源于stack exchange,提问作者M Javad Salehi
相关产品推荐
相关产品推荐

