我正在尝试使用通用映射器来映射两个对象。因此,我以这种方式从文档中设置了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);
答案 0 :(得分:1)
按如下方式配置映射器时,如果将DataObject1
映射到DataObject2
,则映射将成功:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap(typeof(Source<>), typeof(Destination<>));
cfg.CreateMap<DataObject1, DataObject2>();
});
...还是您要避免在编译时完全知道可能需要将DataObject1
映射到DataObject2
?