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

現在のマッピング構成は新しいものを作成しますが、内部CustomCollectionSomeObjectアイテムはソース コレクション内のオブジェクトへの参照です。それが問題にならない場合は、次のマッピング構成を使用できます。

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 に答える