使用automapper转换对象

时间:2014-04-21 13:48:54

标签: c# automapper

如何使用automapper将Request对象转换为IRequest对象?

此示例不起作用。在新对象IRequest中,所有属性都为null:

Mapper.CreateMap<Request, IRequest>();
Mapper.CreateMap<RequestInfo, RequestInfo>();
Mapper.CreateMap<ClientInfo, ClientInfo>();


public class Request { 

    public RequestInfo requestInfo { get; set; }        

    public ClientInfo clientInfo { get; set; }

    public DocumentInfo documentInfo { get; set; }   

}

public interface IRequest { 

    RequestInfo RequestInfo { get; set; }        

    ClientInfo ClientInfo { get; set; }

    DocumentInfo DocumentInfo { get; set; }   

}

1 个答案:

答案 0 :(得分:4)

自动映射按属性名称映射,而不是类型名称。由于两个类中的属性由于大小写而具有不同的名称,因此您需要明确定义映射:

Mapper.CreateMap<Request, IRequest>()
      .ForMember(d => d.RequestInfo , m => m.MapFrom(s => s.requestInfo ))
      .ForMember(d => d.ClientInfo  , m => m.MapFrom(s => s.clientInfo  ))
      .ForMember(d => d.DocumentInfo, m => m.MapFrom(s => s.documentInfo))

或者您可以将Request中的属性重命名为一致。

作为旁注,我使用IRequest作为班级名称。以I开头的类型几乎普遍被认为是接口,而不是类。