我有一个自定义类:
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文件是由代码工具生成的,所以我无法改变它。
这可能吗?
答案 0 :(得分: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();
}
}