Automapper:将TypeConverter定位到特定对象

我使用Automapper将一个对象转换为另一个对象,如下所示:

Mapper.Initialize(cfg =>
{
    cfg.RecognizePrefixes("m_n", "m_b", "m_l", "m_ach", "m_wz", "m_sz");
    cfg.CreateMap<short[], string>().ConvertUsing(new ShortArrayTypeConverter());
    cfg.CreateMap<int, DateTime>().ConvertUsing(new DateTimeTypeConverter());
    cfg.CreateMap<SUserInfoApiV4, UserInfo>();
});
Mapper.AssertConfigurationIsValid();

当我想将SUserInfoApiV4映射到UserInfo时,这很好用。 不过,我也需要转换其他对象,甚至做相反的事情(像UserInfo到SUserInfoApiV4中)。

这是我遇到问题的地方。 类型转换器是全球性的,不受特定对象的束缚。 我试图通过使用这样的配置文件来解决这个问题:

Mapper.Initialize(cfg =>
{
    cfg.CreateMap<SUserInfoApiV4, UserInfo>();
    cfg.AddProfile<SUserInfoApiV4Profile>();

    cfg.CreateMap<UserInfo, SUserInfoApiV4> ();
    cfg.AddProfile<UserInfoProfile>();
});
Mapper.AssertConfigurationIsValid();

然后添加以下配置文件:

public class SUserInfoApiV4Profile : Profile
{
    public SUserInfoApiV4Profile()
    {
        CreateMap<short[], string>().ConvertUsing(new ShortArrayTypeConverter());
        CreateMap<int, DateTime>().ConvertUsing(new IntDateTimeTypeConverter());
    }
}

public class UserInfoProfile : Profile
{
    public UserInfoProfile()
    {
        CreateMap<string, short[]>().ConvertUsing(new StringTypeConverter());
        CreateMap<DateTime, int>().ConvertUsing(new DateTimeIntTypeConverter());
    }
}

然而,它似乎并没有像预期的那样工作(或者我认为)。 有没有办法将类型转换器关联到特定对象,所以我不必手动转换每个成员?

编辑:我在一段时间后发现了这个话题:客户价值解析器与全球automapper,但只为特定的地图?

所以我想这是不可能的,我必须手动映射每个领域。 现在我不明白为什么我应该首先使用AutoMapper。

链接地址: http://www.djcxy.com/p/37361.html

上一篇: Automapper: Target TypeConverter to specific objects

下一篇: Automapper. Map if source member is null