class SomeObject
{
public string name {get;set;}
}
class CustomCollection : List<SomeObject>
{
public int x {get;set;}
public string z {get;set;}
}
class A
{
public CustomCollection collection { get ; set; }
}
class B
{
public CustomCollection collection { get ; set; }
}
// Creating mapping
Mapper.CreateMap<A, B>();
当我将A映射到B时,除了CustomCollection中的X和Z之外,所有属性都被正确映射。
CustomCollection正确获取已初始化的SomeObject列表,并且还正确映射了SomeObject.Name。
只有我在集合中声明的自定义属性X,Z才会被映射。
我做错了什么?
我发现的唯一方法就是像下面那样进行后映射,但是它有点挫败了使用automapper的目的,每当我向CustomCollection添加一个新属性时它就会中断。
Mapper.CreateMap<A, B>().AfterMap((source, destination) => {
source.x = destination.x;
source.z = destination.z ;
});
答案 0 :(得分:0)
您当前的映射配置确实会创建一个新的CustomCollection
,但里面的SomeObject
项是对源集合中对象的引用。如果这不是问题,您可以使用以下映射配置:
CreateMap<CustomCollection, CustomCollection>()
.AfterMap((source, dest) => dest.AddRange(source));
CreateMap<A, B>();
如果b.collection
引用a.collection
你也可以,你可以使用以下映射配置:
CreateMap<CustomCollection, CustomCollection>()
.ConstructUsing(col => col);
CreateMap<A, B>();
AutoMapper不是为克隆而设计的,所以如果你需要,你必须为此编写自己的逻辑。