Отображение сложного объекта в AutoMapper

Ниже приведены простые объекты, которые отлично работают с AutoMapper:

public class Source
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Destination
{
    public int Id { get; set; }
    public string Name { get; set; }
}

СэмплКласс.cs

using Automapper;

public class SampleClass
{
    private IMapper _mapper;
    public SampleClass(IMapper mapper)
    {
        _mapper = mapper;
    }

    public void Logic(Souce source)
    {
        var Dest = _mapper.Map<Destination>(source);
    }
}

Приведенный выше оператор сопоставления работает нормально, и я вижу, что все поля сопоставляются от источника к месту назначения, поскольку это простой объект.

Но мое требование таково: у меня есть сложная структура объекта следующим образом:

public class Source
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<SourceChild> lstChild { get; set; }
}

public class SourceChild
{
    public string Address { get; set; }
}

public class Destination
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<SourceDestination> lstChild { get; set; }
}

public class SourceDestination
{
    public string Address { get; set; }
}

public void Logic(Souce source)
{
    var Dest = _mapper.Map<Destination>(source);
}

Приведенное выше сопоставление приводит к исключению, говорящему:

Отсутствует конфигурация сопоставления типов или неподдерживаемое сопоставление.

Чего мне здесь не хватает для отображения сложного объекта?

Поделитесь полным сообщением об исключении и конфигурацией/профилем сопоставления. Он сообщит вам, какая конфигурация/правило сопоставления отсутствует.

Yong Shun 27.04.2024 04:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Вам необходимо иметь профиль сопоставления /конфигурацию, как показано ниже:
public class SourceProfile : Profile
{
    public SourceProfile()
    {
        CreateMap<Source, Destination>();
        CreateMap<SourceChild, SourceDestination>();
    }
}
  1. Зарегистрируйте профиль картографирования в Конфигурация картографа.
MapperConfiguration _config = new MapperConfiguration(cfg => cfg.AddProfile<SourceProfile>());

Если вы используете ASP.NET Core, вы регистрируете службу AutoMapper в контейнере DI со сборкой проекта, которая содержит ваш Profile класс ( Сканирование сборки для автоматической настройки).

services.AddAutoMapper(/* profileAssembly1 */);
Пример демо @ .NET Fiddle
Yong Shun 27.04.2024 06:02

Другие вопросы по теме