我正处于重构过程中并利用AutoMapper(6.2.1)帮助我们格式化符合特定合同的API返回。我们在内部使用的DTO对象旨在简化我们对数据的理解,然后再以更复杂的类型返回数据。
问题:
我有一个带有List<T>
的DTO,我需要将<T>
的一个属性映射到更复杂类型的集合。这实际上非常简单,但问题是,如果我试图以更复杂的类型映射到的集合实际上是在另一个&#34;更高的&#34;采集。基本上我是在收集问题中的一个集合。
Ex: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
中取ItemDescriptionDTO
并通过这个可怕的嵌套对象链映射它以设置UnparsedItemDescription
我能够从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
,因为该类中还有其他属性会被返回,因此我无法回复说ComplexItemDescription
我很感激你能给予的帮助。我当然对Automapper如何工作(我正在努力改善它的过程)有一个基础了解,但这实际上是让我暂时抛弃。