我是 AutoMapper 新手。我的映射没有按预期工作,我确定我做错了什么,但无法弄清楚。对不起,如果这个问题令人困惑,但我会尽力澄清。假设我们有三个类:
public class Person
{
public ContactInfo1 Contact { get; set; }
}
public class ContactInfo1
{
public string Name { get; set; }
}
public class ContactInfo2
{
public string AnotherName { get; set; }
}
现在,我想设置我的映射,以便 ContactInfo1 可以映射到 ContactInfo2 和从 ContactInfo2 映射。然后我希望能够映射 Person1 -> ContactInfo2 (这可能看起来很奇怪,但无论如何我都需要这样做)。我尝试了以下映射配置:
var autoMapperConfig = new AutoMapper.MapperConfiguration(cfg =>
{
cfg.CreateMap<ContactInfo1, ContactInfo2>()
.ForMember(dest => dest.AnotherName, opt => opt.MapFrom(src => src.Name)).ReverseMap();
cfg.CreateMap<ContactInfo2, Person>()
.ForMember(dest => dest.Contact, opt => opt.MapFrom(src => src)).ReverseMap();
});
var mapper = autoMapperConfig.CreateMapper();
对于测试数据:
var testPerson = new Person();
testPerson.Contact = new ContactInfo1() { Name = "Person1" };
我执行以下操作:
var contactInfo2Test = mapper.Map<Person, ContactInfo2>(testPerson);
这不会给我任何错误,但 contactInfo2Test.AnotherName 是空的。请指教!谢谢。
请注意,我意识到我可以去:
cfg.CreateMap<Person, ContactInfo2>() .ForMember(dest => dest.AnotherName, opt => opt.MapFrom(src => src.Contact.Name));
然后我会重新映射 Contact1->Contact2,在更复杂的情况下,我真的想避免这种情况。