我对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
}
由于
答案 0 :(得分:2)
您是否尝试过使用opt.Skip建议的here。
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());
我发现this吉米似乎在这里解决了核心问题。
所以,根据我的发现,似乎没有办法同时使用Condition和UseDestinationValue。