我有一个简单的 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()
更好/更有效的方法?
有一种更优化的方法,无需使用 .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 列表。这避免了创建新集合的开销,从而可以提高性能,尤其是对于大型数据集。