AutoMapper TypeConverter将可空类型映射为不可空类型

时间:2012-01-10 16:32:30

标签: c# c#-4.0 automapper typeconverter

我正在使用AutoMapper,我已经注册了一个TypeConverter来将可以为空的长值映射到长值,如下所示:

public class NullableLongToLongConverter : TypeConverter<long?, long>
{
    protected override long ConvertCore(long? source)
    {
        return source ?? 0;
    }
}

这样可以正常工作,并自动获取任何可转换为long的可空长度。

但是,我有一些其他地图想要将可空的长片“转换”为可空的长片。这些也最终使用这种类型的转换器。例如,在下面的代码中,两个属性都设置为0,但我希望NullableLong设置为null。我做错了吗?

public class Foo
{
    public long? NullableLong{get {return null;}}
    ......
}

public class Bar
{
    public long NotNullableLong{get;set;}
    public long? NullableLong{get;set;}
    ......
}

public static class ComplicatedMapRegister
{
    public static void RegisterMap()
    {
        Mapper.CreateMap<Foo, Bar>()
            .ForMember(b => b.NotNullableLong, opt => opt.MapFrom(f.NullableLong))
            .ForMember(b => b.NullableLong, opt => opt.MapFrom(f.NullableLong))
            .....
    }
}

public static class AutoMapperRegistration
{
    public static void RegisterAllMaps()
    {
        Mapper.CreateMap<long?, long>().ConvertUsing<NullableLongToLongConverter>();
        ComplicatedMapRegister.RegisterMap();
    }
}

1 个答案:

答案 0 :(得分:0)

您只注册了从long?映射到long的转换器。您是否只需创建并注册一个将从long?映射到long?的“转换器”?