AutoMapper 扁平化嵌套 json

AutoMapper Flattening out nested json

我正在尝试使用 Automapper 来拉平 json 结果,但我收到一条错误消息:Missing type map configuration or unsupported mapping

在我的项目中,我同时安装了 AutoMapper 和 AutoMapper 依赖注入包。

我的 Startup.cs 有以下调用:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAutoMapper(typeof(Startup));
}

我已经按如下方式设置了我的映射配置文件:

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<JiraTicket, JiraDto>();
    }
}

我要展平的模型和 DTO 应该展平为:

public class JiraTicket
{
    [Key]
    public int TicketId { get; set; }
    public string id { get; set; } 
    public string self { get; set; }
    public string key { get; set; } 
    public JiraTicketFields fields { get; set; }
}
public class JiraDto
{
    public int Id { get; set; }
    public string Creator { get; set; }
    public string Description { get; set; }
    public string Key { get; set; }
    public string Self { get; set; }
}

大多数 DTO 变量都在`JiraTicketFields 中。

最后,我使用以下代码行调用我的存储库:

public async Task<IEnumerable<JiraDto>> GetAll()
{
    var tickets =  _jiraRepo.GetAll().ToList();
    var result = (IEnumerable<JiraDto>)_mapper.Map<JiraDto>(tickets);
    return result;
}

它是在我的项目到达 var result... 行时引发错误的。我在其中缺少什么?

您创建了一个配置文件,告诉 Automapper 如何将单个 JiraTicket 转换为单个 JiraDto,但我认为问题在于您正在尝试映射 IEnumerable<JiraTicket>到单个 JiraDto,而 Automapper 不知道该怎么做。

您可能想要做的(如果我理解正确的话)是将 IEnumerable<JiraTicket> 映射到 IEnumerable<JiraDto>。然后,您必须这样做:

public async Task<IEnumerable<JiraDto>> GetAll()
{
    var tickets =  _jiraRepo.GetAll().ToList();
    var result = _mapper.Map<IEnumerable<JiraDto>>(tickets);
    return result;
}

调用此函数将 JiraTickets 列表转换为 JiraDtos 的 IEnumerable

var result = mapper.Map<IEnumerable<JiraDto>>(tickets);

AutoMapper 中的转换是通过泛型参数完成的,而不是通过显式转换