自动映射器不适用于嵌套对象

时间:2018-07-23 18:01:07

标签: c# .net-core automapper

我目前正在使用.net core 2.1,并尝试对嵌套对象使用automapper将模型转换为dto并将dto转换为模型。正确映射每个字段后,关系映射就会出现问题。

模型

public class DropdownValue
{
    public int Id { get; set; }
    public string Value { get; set; }
    public int PropertyId { get; set; }
    public Property Property { get; set; }
}

public class Property
{
    public int Id { get; set; }
    public string Title { get; set; }
    public ValueTypes ValueType { get; set; }
    public InputTypes InputType { get; set; }
    public List<DropdownValue> DropdownValues { get; set; }
}

Dtos

public class DropdownValueDto
{
    public int Id { get; set; }
    public string Value { get; set; }
    public PropertyDto Property { get; set; }
}

public class PropertyDto
{
    public int Id { get; set; }
    public string Title { get; set; }
    public InputTypes InputType { get; set; }
    public ValueTypes ValueType { get; set; }
}

映射器

public class MappingProfile : Profile
{
    public MappingProfile() 
    {
        CreateMap<Property, PropertyDto>();
        CreateMap<DropdownValue, DropdownValueDto>();
    }
}

处理程序中的用法

_mapper.Map<List<Models.DropdownValue>, List<DropdownValueDto>>(dropdownValues)

2 个答案:

答案 0 :(得分:0)

我在.net 4x框架项目中始终使用 automapper 映射工具,但是在开发.net核心项目时,我总是使用并推荐 mapster 映射工具。这是非常快速和简单的! Benchmark Results它还可以解决您的问题。您可以在下面查看示例用法。

首先创建一个映射器类。

public static class Mapper
{
    public static void CreateMap()
    {
        TypeAdapterConfig<Property, PropertyDto>
            .NewConfig();

        TypeAdapterConfig<DropdownValue, DropdownValueDto>
            .NewConfig();
    }
}

在启动时初始化

    public Startup(IHostingEnvironment env)
    {
        // other stuffs

        // Mapping
        Mapper.CreateMap();
    }

用法

dropdownValues.Adapt<List<Models.DropdownValue>, List<DropdownValueDto>>()

答案 1 :(得分:0)

//Models

public class DropdownValue
{
    public int Id { get; set; }
    public string Value { get; set; }
    public int PropertyId { get; set; }
    public Property Property { get; set; } = new Property();
}

public class Property
{
    public int Id { get; set; }
    public string Title { get; set; }
    public ValueTypes ValueType { get; set; } = new ValueTypes();
    public InputTypes InputType { get; set; } = new InputTypes();
    public List<DropdownValue> DropdownValues { get; set; } = new List<DropdownValue>();
}
//Dtos

public class DropdownValueDto
{
    public int Id { get; set; }
    public string Value { get; set; }
    public PropertyDto Property { get; set; } = new PropertyDto();
}

public class PropertyDto
{
    public int Id { get; set; }
    public string Title { get; set; }
    public InputTypes InputType { get; set; } = new InputTypes();
    public ValueTypes ValueType { get; set; } = new ValueTypes();
}