取引先のプロパティのマッピングを作成します。
Mapper.CreateMap<Source, Dest>()
.ForMember(d => d.Item1, o => o.MapFrom(s => s.ItemArray[0]))
.ForMember(d => d.Item2, o => o.MapFrom(s => s.ItemArray[1]))
.ForMember(d => d.Item3, o => o.MapFrom(s => s.ItemArray[2]))
.ForMember(d => d.Item4, o => o.MapFrom(s => s.ItemArray[3]));
使用法:
Source source = new Source() { ItemArray = new int[] { 1, 2, 3, 4 } };
Dest dest = Mapper.Map<Source, Dest>(source);
をUPDATE:いいえ、簡単な方法がありません。あなたのプロパティFooは、ソースプロパティバーのインデックスNの要素にマップされるべきであることをAutoMapperがどのように理解するでしょうか?このすべての情報を提供する必要があります。
UPDATE:
Automapper
からの投影は、オブジェクトモデルを平坦化を越えて先にソースを変換します。余分な構成がなければ、
AutoMapperは、ソースタイプの命名構造と一致するように、フラット化された宛先を必要とします。ソース構造をソース構造に正確に一致しない宛先に投影する場合は、カスタムメンバーマッピング定義を指定する必要があります。
だから、そうです。命名構造が一致しない場合は、メンバーのカスタムマッピングを指定する必要があります。
UPDATE: まあ、実際に手動ですべての変換を行うことができます(私は名前でマップすることができ、他の性質を持っている場合は特に、それははるかに良い方法だとは思わない):
Mapper.CreateMap<Source, Dest>().ConstructUsing((s) => new Dest()
{
Item1 = s.ItemArray[0],
Item2 = s.ItemArray[1],
Item3 = s.ItemArray[2],
Item4 = s.ItemArray[3]
}
そこで、基本的いいえ... –
@Dror Helperはい、automapper wikiの引用符で私の最後の更新を見てください。 –
はい、カスタムコンバーターや他の機能などのトリックがあるかもしれませんが、おそらくそのうちの1つが助けになるでしょう –