如何从 ASP.NET Core Web API 仅返回 JSON 结果中的接口成员

问题描述 投票:0回答:1

我有一个简单的 API,它从数据库中返回行列表,如下所示:

[HttpGet]
[Route("list/{count}")]
public async Task<ActionResult<IEnumerable<IResult>>> GetRows(int count)
{
    var list = await dbc.GetList(count);
    return new JsonResult( list.ToList<IResult>() );
}

数据库返回一行,其中包含属性 id、name、status 等,而接口有一个子集,如下所示:

public class Result
{
   int id { get; set; }
   string name { get; set; }
   int status { get; set; }
}

public interface IResult
{
   int id { get; set; }
   string name { get; set; }
}

我有

.ToList()
仅返回 json 结果中的字段,有没有比先转换为另一个
List()
更好/更有效的方法?

c# asp.net-core asp.net-core-webapi
1个回答
0
投票

有一种更优化的方法,无需使用 .ToList() 将列表转换为另一个列表。您可以按原样返回数据,并且在序列化期间,只有 IResult 接口中定义的属性才会包含在 JSON 响应中。以下是实现这一目标的方法:

[HttpGet]
[Route("list/{count}")]
public async Task<ActionResult<IEnumerable<IResult>>> GetRows(int count)
{
    var list = await dbc.GetList(count);
    return new JsonResult(list);
}

当您返回列表时,它仍然包含数据库中的所有字段。但是,在序列化期间,只有 IResult 接口中指定的属性(id 和 name)才会包含在 JSON 响应中。这是因为 JsonResult 对象仅序列化那些定义的属性。

直接返回列表无需不必要地转换为新的 IResult 列表。这避免了创建新集合的开销,从而可以提高性能,尤其是对于大型数据集。

© www.soinside.com 2019 - 2024. All rights reserved.