使用动态属性名称从CTO到目的地的C#AutoMapper?

时间:2018-03-22 17:17:47

标签: c# automapper dto

我已经研究了基于属性的自定义解析器,但我似乎只是找到旧版AutoMapper的代码。

我的用例目前相当简单。我正在使用AutoMapper将DTO映射到域实体。

DTO和域实体上的字段名称都匹配100%,除了每对一个字段,此后称为“密钥字段”。我有大约20个DTO - >此时域名配对,这个数字会增长。

如果我可以将AutoMapper的自动名称解析用于所有属性映射,除了单个“Key”字段,那将是很好的。

域实体上的“Key”字段遵循约定Key,并且始终是字符串。

可以重写DTO上的“Key”字段以匹配域实体,允许在所有情况下使用基于名称的映射,但是我很好奇如果我想在PropertyInfo中使用PropertyInfo将会是什么解决方案我的ForMember表达,或者甚至可能。

1 个答案:

答案 0 :(得分:0)

我想你可以使用PropertyInfo。如何使用AfterMap为您的键属性设置值:

class Entity
{
    public int Key { get; set; }
    public int MyProperty1 { get; set; }
}

class Dto
{
    public dynamic MyKeyProperty { get; set; }
    public int MyProperty1 { get; set; }
}

Mapper.Initialize(cfg =>
{
    cfg.CreateMap<Entity, Dto>()
       .ForMember(nameof(Dto.MyKeyProperty), c => c.Ignore())
       .AfterMap((e, d) => { d.MyKeyProperty = $"{e.Key} ???"; });
});