反序列化抽象类的集合[重复]

2024-02-04

我有一个包含 Web API 和 MVC Web 应用程序的解决方案。

我的 API 有这个实体模型,有一个抽象父类和几个子类:

public abstract class Person
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

public class Student : Person
{
    public Address Dormitory { get; set; }
    ... additional fields
}

public class Professor : Person
{
    public Schedule OfficeHours { get; set; }
    ... additional fields
}

我有一个端点来获取所有人员:

[HttpGet]
[ProducesResponseType(typeof(IEnumerable<Person>), (int)HttpStatusCode.OK)]
public async Task<IActionResult> GetPersons()
{
    var persons = await _dbContext.Persons.ToListAsync();

    return Ok(persons);
}

这与实体框架配合得很好,它返回学生和教授的集合及其属性。

我的 Web 应用程序正在调用此 API。 Web项目有视图模型,与API中的实体模型基本相同。以下是尝试调用 API 并反序列化结果的方法:

public async Task<IEnumerable<PersonViewModel>> GetPersons()
{
    var data = await _apiClient.GetStringAsync(_personsUri);

    var response = JsonConvert.DeserializeObject<IEnumerable<PersonViewModel>>(data);

    return response;
}

问题是我无法反序列化到我的视图模型,我收到一个异常:

JsonSerializationException:无法创建 PersonViewModel 类型的实例。类型是接口或抽象类,无法实例化。

如果我删除abstract从我的 PersonViewModel 中,它仅返回这些对象,并且不包含学生的属性或教授的属性。

我还有其他方法可以做到这一点吗?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反序列化抽象类的集合[重复] 的相关文章

随机推荐