2

我正在重构并利用 AutoMapper (6.2.1) 来帮助我们格式化符合特定合同的 API 返回。我们在内部使用的 DTO 对象旨在简化我们在以更复杂的类型返回数据之前对数据的理解。

问题:我有一个 DTO,List<T>其中我需要将 的属性之一<T>映射到更复杂类型的集合。这实际上非常简单,但问题是,如果我试图以更复杂的类型映射到的集合实际上位于另一个“更高”的集合中怎么办。本质上,我在一个集合问题中的一个集合中。

例如:DTO

public class ItemDTO
{
   List<ItemDescriptionDTO> ItemDescriptions { get; set; }
}

public class ItemDescriptionDTO
{
    public string Description { get; set; }
}

我需要映射到并且无法控制的更复杂的对象

public class ComplexThing // This is the object I need (It's ugly, I hate it too)
{
    public ComplexItemDescriptions { get; set; }
}

public class ComplexItemDescriptions 
{
    public List<ComplexItemDescription> ComplexItemDescription { get; set; }
}

public class ComplexItemDescription
{
    public UnparsedItemDescriptions UnparsedItemDescriptions { get; set; }
}

public class UnparsedItemDescriptions
{
    public List<UnparsedItemDescription> UnparsedItemDescription { get; set; }
}

public class UnparsedItemDescription
{
    public string UnparsedItemDescription { get; set; }
}

本质上,我需要通过这个可怕的嵌套对象链来设置Description我的简单和映射ItemDescriptionDTOUnparsedItemDescription

我能够正确地从UnparsedItemDescription一路映射到,ComplexItemDescription但比这更高的Complex东西给我带来了一些麻烦。

这是我到目前为止的映射:

config.CreateMap<ItemDescriptionDTO, UnparsedItemDescription>()
    .ForMember(dest => dest.UnparsedItemDescription, map => map.MapFrom(src => src.Description));

config.CreateMap<ItemDTO, UnparsedItemDescriptions>()
    .ForMember(dest => dest.UnparsedItemDescription, map => map.MapFrom(src => src.ItemDescritpions));

config.CreateMap<ItemDTO, ComplexItemDescription>()
    .ForPath(dest => dest.UnparsedItemDescriptions.UnparsedItemDescription, map => map.MapFrom(src => src.ItemDescriptions));

// This is where we start failing (I think I am just not understanding something fundamental to how Automapper does things or I am up against some silly edge case
config.CreateMap<ItemDTO, ComplexItemDescriptions>()
    .ForMember(dest => dest.ComplexItemDescription, map => map.MapFrom(src => src.ItemDescriptions));

我需要,ComplexThing因为该类中还有其他属性被返回,所以我不能仅仅返回说 aComplexItemDescription

我将不胜感激您可以提供的帮助。诚然,我对 Automapper 的工作原理有基本的了解(我正在努力变得更好),但这真的让我感到震惊。

4

0 回答 0