如何使用C#AutoMapper(版本= 7.0.1.0)排除自动映射嵌套对象的方法?

当我的自动映射器映射对象并且它是嵌套的复杂对象时,我遇到了问题。例如,我有一个报告类,如下所示:

 public class Report
 {
      public virtual Guid Id { get; set; }

      public virtual string Title { get; set; }

      public virtual Status Status { get; set; }

 }

此外,我对此对象有一个模型,如下所示:

public class ReportModel 
{
      public Guid Id { get; set; }

      public string Title { get; set; }

      public StatusModel Status { get; set; }
}

Status类如下:

public class Status
{
    public virtual int Id { get; set; }

    public virtual string Title { get; set; }
}

,并且StatusModel类与Status类相同。

我的映射器如下:

var cfg = new MapperConfigurationExpression();
cfg.CreateMap<Status,StatusModel>()
         .ForMember(x => x.Title,o => o.MapFrom(s => TranslateValue(s.Title))).ReverseMap();
cfg.CreateMap<Report,Report>().ReverseMap();

我的问题是,在很多情况下,当我将自动映射器用于类Report时,我需要翻译Status标题,此代码可以。但是在某些特定情况下,当我将自动映射器用于Report类时,不应翻译Status对象的标题。

因此,在某些特定情况下,我需要告诉自动映射器停止自动映射嵌套对象。对于这种情况有什么解决方案吗?

PS:AutoMapper的版本是7.0.1.0

谢谢。

yaoyuan_1111 回答:如何使用C#AutoMapper(版本= 7.0.1.0)排除自动映射嵌套对象的方法?

如果您能够从源对象(在本例中为Status对象)解决特殊情况,则可以使用ForMember中的PreCondition()选项:

var cfg = new MapperConfigurationExpression();
cfg.CreateMap<Status,StatusModel>()
         .ForMember(x => x.Title,o => 
         {
             o.PreCondition(s => s.Somefield == 42);
             o.MapFrom(s => TranslateValue(s.Title))
         }).ReverseMap();
cfg.CreateMap<Report,Report>().ReverseMap();
本文链接:https://www.f2er.com/3132713.html

大家都在问