自动映射器条件自定义值解析程序

本文关键字:程序 自定义 条件 映射 | 更新日期: 2023-09-27 18:30:52

是否只有在满足特定条件时才可以在自动映射器中使用自定义值解析器?

就我而言,如果目标不为 null,我只想使用自定义值解析器更新值。

这是我的代码示例。基本上我需要将条件添加到此。可能吗?

Mapper.CreateMap<ResponseXml, MyModel>()
    .ForMember(dest => dest.FirstName, 
                 op => op.ResolveUsing<ResponseXmlValueResolver>()
                .FromMember(x => x.data.FirstOrDefault(y => y.name == "name")))

自动映射器条件自定义值解析程序

我认为厄里斯的解决方案会起作用;这只是语法错误。

Mapper.CreateMap<ResponseXml, MyModel>()
    .ForMember(dest => dest.FirstName, 
             op => {
                    op.Condition(src => src != null);
                    op.ResolveUsing<ResponseXmlValueResolver>();
                      .FromMember(x => x.data.FirstOrDefault(y => y.name == "name"));
             });

这是你想要的吗?
如果目标为 null,则将忽略映射.
如果目标为 null,则将应用映射(客户已解析)。

由于条件是在解析成员评估的,就像这里所说的那样,前面的答案都不正确。您应该以这种方式使用前提条件:

Mapper.CreateMap<ResponseXml, MyModel>()
.ForMember(dest => dest.FirstName, 
         op => {
                op.PreCondition(src => src != null);
                op.ResolveUsing<ResponseXmlValueResolver>();
                  .FromMember(x => x.data.FirstOrDefault(y => y.name == "name"));
         });

这行得通吗?(我面前没有窗户盒子)

Mapper.CreateMap<ResponseXml, MyModel>()
    .ForMember(dest => dest.FirstName, 
             op => op.Condition(src => src != null)
                     .ResolveUsing<ResponseXmlValueResolver>()
                     .FromMember(x => x.data.FirstOrDefault(y => y.name == "name")))