如何为Automapper创建更通用的解析器?

时间:2013-04-04 14:32:06

标签: automapper

对于某些属性,当值为0时,我想将值转换为NULL。

当我创建地图时,我使用自定义解析器为我处理转换,如下所示:

AutoMapper.Mapper.CreateMap<ContactData, Contact>()
     .ForMember(x => x.ContactTypeId, y => y.ResolveUsing<ContactTypeIdZeroToNullResolver>());

我的解析器看起来像:

using AutoMapper;

namespace MyCompany.MyProduct.Customers.Data.Helpers
{
    public class ContactTypeIdZeroToNullResolver : ValueResolver<ContactData, int?>
    {
        protected override int? ResolveCore(ContactData source)
        {
            if (source.ContactTypeId == 0)
                return null;

            return source.ContactTypeId;
        }
    }
}

这很好用!

我的问题是,是否有可能使这更通用?我尝试使用int替换ContactData,但是错误仍然被抛出。

1 个答案:

答案 0 :(得分:1)

这样的事情怎么样:

AutoMapper.Mapper.CreateMap<int, int?>()
    .ConvertUsing(src => src == 0 ? (int?)null : src);

AutoMapper.Mapper.CreateMap<ContactData, Contact>();

AutoMapper.Mapper.AssertConfigurationIsValid();

(当然假设ContactTypeIdint中的ContactDataint?中的Contact

您应该小心这一点,因为它将适用于这些类型的所有映射。

你也可以这样内联:

AutoMapper.Mapper.CreateMap<ContactData, Contact>()
    .ForMember(dest => dest.ContactTypeId,
                       opt => opt.MapFrom(src => src.ContactTypeId == 0
                            ? (int?)null
                            : src.ContactTypeId));

将实现相同的目标,但不会像通用那样。