【问题标题】:AutoMapper - setting destination string to null actually makes it string.EmptyAutoMapper - 将目标字符串设置为 null 实际上使它成为 string.Empty
【发布时间】:2009-10-06 16:55:28
【问题描述】:

使用以下映射:

Mapper.CreateMap<ObjectA, ObjectB>()
    .ForMember(dest => dest.SomeStringProperty, opt => opt.MapFrom(src => null))

SomeStringProperty 现在是空字符串,不为空(如我所料)

这是一个错误吗?我怎样才能让它真正为空?

我看到opt.Ignore() 会使其为空,但我实际上想做一个如下的条件空,而上述简化的错误(?)正在阻止这种情况

Mapper.CreateMap<ObjectA, ObjectB>()
    .ForMember(dest => dest.SomeStringProperty, opt => opt.MapFrom(src => src.SomeOtherProp != null ? src.SomeOtherProp.Prop1 : null))

【问题讨论】:

  • 我认为这是一个错误,是开发 AutoMapper 早期的遗物,我在其中制作了非常耐空的东西。同时,试试 AllowNullDestinationValues = false,我会处理补丁。

标签: c# automapper


【解决方案1】:

我在查看源代码后找到了该设置...确认这不是一个错误,而实际上是一个可配置的设置。

当我配置我的映射时..

Mapper.Initialize(x =>
{
    x.AddProfile<UIProfile>();
    x.AddProfile<InfrastructureProfile>();
    x.AllowNullDestinationValues = true; // does exactly what it says (false by default)
});

【讨论】:

    【解决方案2】:

    您可以使用为字符串定义映射

    ITypeConverter<string, string>
    

    并且当您转换时,如果为 null,则返回 null。我认为这是设计使您得到一个空字符串,我什至自己也觉得这很自然且有用,但我当然可能是错的;)

    我可以根据要求提供比上面更精确的代码,但我想你知道你在做什么。

    【讨论】:

    • 问题来自 MapFrom 表达式,当它获得空值时,它返回 string.Empty。如果我为 string -> string 实现自定义 TypeConverter,它将返回 null,但 MapFrom 会将其转换为 string.empty。
    猜你喜欢
    • 2018-01-03
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多