1

カスタムクラスがあります:

public class Class1 {
    public string Id { get; set; }
    public MFileType DefaultFileType { get; set; }
}

私がマップしようとしているもの:

public class Class2 {
    public string Id { get; set; }
    public virtual FileType DefaultFileType { get; set; }
}

ForMember() メソッドの FileType を無視できることはわかっています。

しかし、MFileType/FileType プロパティの Class1 を Class2 にマップすることは可能ですか?

私は使用してみました:

Mapper.CreateMap<Class1, Class2>()
    .ForMember(dest => dest.FileType, opt => opt.MapFrom(src => src.MFileType));

しかし、これは機能しません。Class2 ファイルはコード ツールによって生成されたので、変更できません。

これは可能ですか?

4

1 に答える 1

1

さて、MFileType(継承)の子タイプですFileType。コードを見ると、提供されたクラスを指定してマッピングしようとしているdest.DefaultFileType(ではなく)ため、マッピングが正しくないようです。dest.FileTypeこれを修正すると、以下のデモコードに示すように、機能するはずです。

AutoMapperライブラリへの参照を追加するか、Nugetを介してインストールする必要があることに注意してください。

class FileType
{
    public int MyProperty { get; set; }
}
class MFileType : FileType
{
    public int MyProperty2 { get; set; }
}

class Class1
{
    public string Id { get; set; }
    public MFileType DefaultFileType { get; set; }
}
class Class2
{
    public string Id { get; set; }
    public virtual FileType DefaultFileType { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        AutoMapper.Mapper.CreateMap<Class1, Class2>()
            .ForMember(dest => dest.DefaultFileType, opt => opt.MapFrom(src => src.DefaultFileType));

        var class1 = new Class1() { Id = "class1", DefaultFileType = new MFileType() { MyProperty = 1, MyProperty2 = 2 } };
        var class2 = AutoMapper.Mapper.Map<Class2>(class1);

        Console.WriteLine("class2.Id = " + class2.Id);
        // If below it says "False", it mapped correctly
        Console.WriteLine("class2.DefaultFileType == null = " + class2.DefaultFileType == null);

        Console.ReadLine();
    }
}
于 2012-09-19T20:21:48.250 に答える