.net core中使用Automapper

安装所需的包

Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection

配置AutoMapper

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
}

添加测试模型

public class QueueInfo
{
    public string Id { get; set; }

    public string QueueNumber { get; set; }

    public DateTime CreateTime { get; set; }
    
}
public class QueueInfoCreateDto
{
    public string Id { get; set; }

    public string QueueNumber { get; set; }

    public DateTime CreateTime { get; set; }
}

创建用户自定义Profile进行映射配置

public class QueueProfile:Profile
{
   public QueueProfile()
    {
        CreateMap<QueueInfo, QueueInfoCreateDto>().ReverseMap();
    }
}

ReverseMap表示双向映射。具体还有很多相关的api,详情可以进行官网查看。

进行测试

public class ValuesController : ControllerBase
{
    //注册IMapper
    private readonly IMapper _mapper;
    public ValuesController(IMapper mapper)
    {
        _mapper = mapper;
    }
    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        QueueInfo info = new QueueInfo
        {
            Id = Guid.NewGuid().ToString(),
            CreateTime = DateTime.Now,
            QueueNumber = "123456789"
        };
        var dto = _mapper.Map<QueueInfoCreateDto>(info);
        return Ok(dto);
    }
}

集合之间也可以进行映射。其他拓展请查看官网进行学习。

Automapper还可以在命名上进行自动转换。

例如

public class QueueInfo
{
    public string Id { get; set; }

    public string QueueNumber { get; set; }

    public DateTime CreateTime { get; set; }
    
    public QueueItem QueueItem { get; set; }
}

public class QueueItem
{
    public string Id { get; set; }

    public string Name { get; set; }
}

public class QueueInfoCreateDto
{
    public string Id { get; set; }

    public string QueueNumber { get; set; }

    public DateTime CreateTime { get; set; }

    /// <summary>
    /// 这里使用的是QueueInfo中的QueueItem对象下的Name。进行映射的时候会自动映射
    /// </summary>
    public string QueueItemName { get; set; }
}
posted @ 2019-05-24 10:25  Jonny-Xhl  阅读(126)  评论(0编辑  收藏  举报