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

问题描述 投票:0回答:1

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

 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; }
}

状态类看起来像这样:

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

谢谢。

c# .net automapper
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();
© www.soinside.com 2019 - 2024. All rights reserved.