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。

但是是否可以将 Class1 映射到 Class2 的 MFileType/FileType 属性?

我尝试使用:

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

但这不起作用。Class2 文件是由代码工具生成的,所以我无法更改。

这可能吗?

4

1 回答 1

1

好的,MFileType是 (inherits) 的子类型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 回答