Automapper 映射嵌套类的成员

3

我遇到了AutoMapper语法的问题。

如何跳过嵌套类中的映射成员(通过条件字符串为空)?我尝试了以下代码:

[TestMethod]
public void TestMethod4()
{
    var a = new A { Nested = new NestedA { V = 1, S = "A" } };
    var b = new B { Nested = new NestedB { V = 2, S = string.Empty } };

    Mapper.CreateMap<B, A>();   
    Mapper.CreateMap<NestedB, NestedA>().ForMember(s => s.S, opt => opt.Condition(src => !string.IsNullOrWhiteSpace(src.S)));
    var result = Mapper.Map(b, a);

      Assert.AreEqual(2, result.Nested.V);       // OK
      Assert.AreEqual("A", result.Nested.S);     // FAIL: S == null
}

谢谢

1个回答

2

您是否尝试使用此处建议的opt.Skip?(链接)

Mapper.CreateMap<NestedB, NestedA>()
 .ForMember(s => s.S, opt => opt.Skip(src => !string.IsNullOrWhiteSpace(src.S)));

编辑:

经过查看源代码,我发现在TypeMapObjectMapperRegistry类中(用于处理嵌套对象的映射),它在检查目标值是否需要保留(使用UseDestinationValue)之前就返回了。否则,我建议这样做:

Mapper.CreateMap<B, A>();
            Mapper.CreateMap<NestedB, NestedA>()
                .ForMember(s => s.S, opt => opt.Condition(src => !string.IsNullOrWhiteSpace(src.S)))
                .ForMember(s => s.S, opt => opt.UseDestinationValue());

我找到了这个,在那里Jimmy似乎解决了这个核心问题。
因此,根据我所发现的,似乎没有办法同时使用Condition和UseDestinationValue。

我正在使用AutoMapper v2,但没有跳过选项。 - user1183964

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接