0
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 ;
});
4

1 回答 1

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 不是为克隆而设计的,因此如果您需要,您必须为此编写自己的逻辑。

于 2013-10-27T17:11:07.490 回答