【问题标题】:AutoMapper TypeConverter mapping nullable type to not-nullable typeAutoMapper TypeConverter 将可空类型映射到不可空类型
【发布时间】:2012-01-10 16:32:29
【问题描述】:

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

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

这工作正常,并自动拾取任何可空的 long 转换为 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();
    }
}

【问题讨论】:

  • 这是一个简化的例子吗?因为如果你想要的只是将 null long 转换?到 0 AutoMapper 为您执行此操作。删除您的NullableLongToLongConverter,在您提供的示例中NotNullableLong 将是0NullableLong 将在映射后的Bar 中为null
  • 成功了,谢谢。我没有意识到 AutoMapper 有内置的约定(以及 int/long -> Enum!)

标签: c# c#-4.0 automapper typeconverter


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 2010-10-21
    • 2016-01-22
    • 2016-08-11
    • 1970-01-01
    • 2021-03-03
    相关资源
    最近更新 更多