使用实体框架在API中返回一个带有JSON附加字段的类作为JSON

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

我有一个名为Employee的类,它具有许多属性,当我想从数据库中读取它并返回它的列表时,我想为其添加一个额外的字段。当前是这样的:

return await _context.Employees.ToListAsync();

我不希望在Employee原因之后使用Select命令,就我所知,我必须在Employee类中列出我的所有属性,以便能够添加如下所示的额外属性:

return await _context.Employees.Select(em => new 
{
   em.Firstname, // In employee class
   em.Lastname, // In employee class
   ... // Other properties in employee class
   EXTRAFIELD = "Data" // Extra field with any data I want to add to employee
}).ToListAsync();

但是在上面的解决方案中,我必须列出员工类中的所有字段。我不想执行以下操作,因为它会将员工放在一个新的对象名称中,即em:

return await _context.Employees.Select(em => new 
    {
       em,
       EXTRAFIELD = "Data" // Extra field with any data I want to add to employee
    }).ToListAsync();

是否有一种方法可以告诉DbContext(_context)返回Employee字段并在其中添加“此新字段”(创建一个与Employee具有相同属性的新对象,但要多添加一个)。

c# json object .net-core dbcontext
1个回答
0
投票

如何创建和返回将继承Employee属性的自定义对象?并且您可以添加额外的通用字段,例如:

public class CustomEmployee<T> : Employee
{
    public T Data { get; set; }
}

我知道您不想使用Select在对象之间复制值,但是我们可以创建类似这样的内容:

public class CustomEmployee<T> : Employee
{

    public CustomEmployee() { } //for cases if you don't want to copy values while creating an instance

    public CustomEmployee(Employee employee)
    {
        foreach (PropertyInfo prop in employee.GetType().GetProperties())
        {
            PropertyInfo prop2 = employee.GetType().GetProperty(prop.Name);
            prop2.SetValue(this, prop.GetValue(employee, null), null);
        }
    }

    public T Data { get; set; }
}

在构造函数中,您必须传递继承的实例Employee,并且上面的代码会将值从Employee复制到CustomEmployee。

并且像这样使用:

_context.Employees.Select(em => new CustomEmployee(em)<object> 
{ 
    Data = "your data" 
}).ToListAsync();
© www.soinside.com 2019 - 2024. All rights reserved.