我有两个类,并使用Automapper将其映射到另一个类。例如:
public class Source
{
// IdName is a simple class containing two fields: Id (int) and Name (string)
public IdName Type { get; set; }
public int TypeId {get; set; }
// another members
}
public class Destination
{
// IdNameDest is a simple class such as IdName
public IdNameDest Type { get; set; }
// another members
}
然后我使用Automapper将Source
映射到Destination
:
cfg.CreateMap<Source, Destination>();
它运作正常,但有时Type
课程中的成员Source
变为null
。在这些情况下,我想在Type
属性的Destination
课程中映射成员TypeId
。这就是我想要的东西:
if Source.Type != null
then map Destination.Type from it
else map it as
Destination.Type = new IdNameDest { Id = Source.Id }
AutoMapper可以吗?
答案 0 :(得分:6)
您可以在声明映射时使用.ForMember()
方法。
像这样:
cfg.CreateMap<Source, Destination>()
.ForMember(dest => dest.Type, opt => opt.MapFrom(src => src.Type != null ? src.Type : new IdNameDest { Id = src.Id }));
答案 1 :(得分:1)
尽管LeeeonTM的答案很好用,但AutoMapper提供了一种专门的机制来替换空值。
“它允许您在目标链的任何位置,如果源值是null,则为目标成员提供备用值”。示例:
cfg.CreateMap<Source, Destination>()
.ForMember(dest => dest.Value, opt => opt.NullSubstitute(new IdNameDest { Id = src.Id }));