Automapper将简单对象映射到更复杂的嵌套类型

时间:2017-11-24 20:39:12

标签: c# asp.net automapper automapper-6

我正处于重构过程中并利用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如何工作(我正在努力改善它的过程)有一个基础了解,但这实际上是让我暂时抛弃。

0 个答案:

没有答案