使用自动映射器忽略第二级子级


public class Source
{
   public ChildSource ChildSource { get; set; }
   //some other properties 
}
public class ChildSource
{
   public List<GrandChildSource> GrandChildSources { get; set; }
   //some other properties
}
public class GrandChildSource
{
   Public ChildSource ChildSource { get; set; }
   //some other properties
}
And Dto classes:
public class SourceDto
{
   public ChildSourceDto ChildSource { get; set; }
   //some other properties
}
public class ChildSourceDto
{
   public List<GrandChildSourceDto> GrandChildSources { get; set; }
   //some other properties
}
public class GrandChildSourceDto
{
   Public ChildSourceDto ChildSource { get; set; }
   //some other properties
}

我想将源/子源类映射到 dto 类并忽略孙子源属性。

我尝试使用UseDestinationValue和Ignore 但它似乎不起作用。

Mapper.CreateMap<Source, SourceDto>()
                .ForMember(dest => dest.ChildSource, opt => { opt.UseDestinationValue(); opt.Ignore(); })
                .AfterMap((source, destination) => Mapper.Map(source.ChildSource, destination.ChildSource));
Mapper.CreateMap<ChildSource, ChildSourceDto>()
                .ForMember(d => d.GrandChildSources, opt => { opt.UseDestinationValue(); opt.Ignore(); });

收到错误"缺少类型映射配置或不支持的 GrandChildSource 映射">

PS:LazyLoadEnabled设置为True。我决定在获得堆栈溢出异常后忽略 GrandChildSources 属性,因为它有循环引用。

除非我错过了什么,否则这应该相当简单,只需简单的映射:

Mapper.CreateMap<Source, SourceDto>();
Mapper.CreateMap<ChildSource, ChildSourceDto>()
    .ForMember(dest => dest.GrandChildSources, opt => opt.Ignore());

或者,您可以忽略 GrandChildSourceDto 上的 ChildSource 属性以避免循环引用问题。

如果有比这更复杂的事情,请澄清问题所在。

相关内容

  • 没有找到相关文章

最新更新