AutoMapper - ポリモーフィズムを使ったマッピングを試す

マッピング元はポリモーフィズムもいけるよね?と確認したくてサンプルを書いてみました。

いつものごとくモデルとプロファイルを用意します。

// マッピング元の親クラス
public abstract class SampleSrcBase {
    public int Id { get; set; }
    public string Value1 { get; set; }
}

// マッピング元
public class SampleSrc : SampleSrcBase {
    public string Value2 { get; set; }
}

// マッピング先
public class SampleDst {
    public int Id { get; set; }
    public string Value1 { get; set; }
    public string Value2 { get; set; }
}

// マッピングのプロファイル
public class SampleProfile : Profile {
    public SampleProfile() {
        CreateMap<SampleSrc, SampleDst>();
    }
}

SampleSrcBase(SampleSrc)からSampleDstにマッピングします。

// 準備
Mapper.Initialize(config => {
    config.AddProfile<SampleProfile>();
});
Mapper.AssertConfigurationIsValid();

// マッピング元のSampleSrcBaseを作る関数
SampleSrcBase getSrc() => new SampleSrc {
    Id = 1,
    Value1 = "x",
    Value2 = "y",
};

// 変数srcはSampleSrcBase型(中身はSampleSrc)
var src = getSrc();

// マップ
var dst = Mapper.Map<SampleDst>(src);

// 確認
// Value2もマッピングされている
Console.WriteLine(dst.Id);  // 1
Console.WriteLine(dst.Value1);  // x
Console.WriteLine(dst.Value2);  // y

ちゃんとマッピングできると。

参考