我目前正在开发一个 ASP.NET Core API 项目,其中使用 AutoMapper 将域实体映射到显示模型。我有一个场景,我在域实体上使用继承,并使用 Include 方法设置映射来处理继承。
我有一个自定义 Response
这是我的代码的简化版本:
型号:
查看型号:
自动映射器简介:
CreateMap<Question, BaseGetAllQuestionViewModel>()
.Include<MultipleChoiceQuestion, GetAllMultipleChoiceQuestionViewModel>();
CreateMap<MultipleChoiceQuestion, GetAllMultipleChoiceQuestionViewModel>()
.ForMember(dest => dest.Choices, opt => opt.MapFrom(src => src.Choices));
查询处理程序:
public async Task<Response<IEnumerable<BaseGetAllQuestionViewModel>>> Handle(GetAllQuestionsBySurveyContentIdQuery request, CancellationToken cancellationToken)
{
var questions = await _questionRepositoryAsync.GetAllQuestionsBySurveyContentIdAsync(request.SurveyContentId);
var questionViewModels = questions.ToList(); // Ensure it's a concrete list
var response = new Response<IEnumerable<BaseGetAllQuestionViewModel>>(questionViewModels);
return response;
}
控制器:
[HttpGet("GetAllQuestionsBySurveyContentId")]
// [Authorize(Roles = "SuperAdmin")]
public async Task<IActionResult> GetAllQuestionsBySurveyContentId([FromQuery] GetAllQuestionsBySurveyContentIdQuery query)
{
var response = await Mediator.Send(query);
return Ok(response);
}
我已经确认
_questionRepositoryAsync.GetAllQuestionsBySurveyContentIdAsync
方法以及控制器中的响应正在返回正确的派生视图模型。但是 return Ok(response);
当线路运行时,它会重定向到我的 Response 类,并且仅将响应作为基本视图模型返回。
这是执行返回行之前控制器中的响应:
多态类型层次结构序列化是通过 System.Text.Json 选择加入的。例如
[JsonDerivedType(typeof(WeatherForecastWithCity))]
public class WeatherForecastBase
{
public DateTimeOffset Date { get; set; }
public int TemperatureCelsius { get; set; }
public string? Summary { get; set; }
}
public class WeatherForecastWithCity : WeatherForecastBase
{
public string? City { get; set; }
}