首页 > 解决方案 > dotnet REST API 中返回类型的多态性

问题描述

在 dotnet 核心 REST api 的上下文中,我想在列出对象时返回一个“轻量级”版本的对象以避免大量不必要的数据。我尝试使用多态性来做到这一点:

public class Person
{
  public string FirstName { get; set; }
  public string LastName { get; set; }
}
public class Student : Person
{
  public int Age { get; set; }
}

[HttpGet("testList")]
public List<Person> getPersons()
{
  List<Person> testList = new List<Person>();
  testList.Add(new Student() { FirstName = "Kevin", LastName = "Smith", Age = 99 });
  return testList;
}

[HttpGet("test")]
public Student getStudent()
{
  return new Student() { FirstName = "Kevin", LastName = "Smith", Age = 99 };
}

当我打电话时/testList,我得到以下 json :

[
  {
    "age": 99,
    "firstName": "Kevin",
    "lastName": "Smith"
  }
]

age由于返回类型,我期望返回不包含参数,但事实并非如此。有没有办法只为列表方法获得“精简版”?

谢谢,

标签: c#jsonrest.net-core

解决方案


我建议使用数据传输对象 (DTO) 仅返回您想要的信息。像这样使用它:

[HttpGet("testList")]
public List<PersonDto> getPersons()
{
  List<Person> testList = new List<Person>(); // ... fetch records from data source

  return testList.Select(e => new PersonDto() { // PersonDto contains only props you need
    FirstName = e.FirstName,
    LastName = e.LastName
  });
}


推荐阅读