嵌套类中的Automapper Map成员

时间:2012-02-01 23:56:15

标签: c# automapper

我对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 个答案:

答案 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。