自动映射器以及泛型和映射缺少的属性

时间:2018-08-17 19:45:10

标签: c# automapper

我正在尝试使用通用映射器来映射两个对象。因此,我以这种方式从文档中设置了Automapper:

        var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap(typeof(Source<>), typeof(Destination<>));
        });
        mapper = config.CreateMapper();

现在,如果源和目标具有相同的属性,并且如果我要从源侧的更多属性转移到目标的较少属性,那么一切都很好。但是,如果源的属性少于目标的属性,而我却收到错误消息:

值---> AutoMapper.AutoMapperConfigurationException: 找到未映射的成员。查看下面的类型和成员。

我的问题是,即使我在编译时不知道它们是什么,也可以忽略这些属性吗?

来源:

 public class Source<T>
{
    public T Value { get; set; }
}

 public class Destination<T>
{
    public T Value { get; set; }
}


public class DataObject1
{
    public int Id { get; set; }
    public string Code { get; set; }
}

public class DataObject2
{
    public int Id { get; set; }
    public string Code { get; set; }
    public string ActiveFlag { get; set; }
}

这是我的测试代码:

        var data = new DataObject1() { Id = 10, Code = "Test" };

        var source = new Source<DataObject1> { Value = data };
        var dest = mapper.Map<Source<DataObject1>, Destination<DataObject2>>(source);

        Assert.AreEqual(dest.Value.Id, 10);

1 个答案:

答案 0 :(得分:1)

按如下方式配置映射器时,如果将DataObject1映射到DataObject2,则映射将成功:

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap(typeof(Source<>), typeof(Destination<>));
    cfg.CreateMap<DataObject1, DataObject2>();
});

...还是您要避免在编译时完全知道可能需要将DataObject1映射到DataObject2