Исключение при отображении сложных типов Automapper
Я пытаюсь реализовать AutoMapper для нового модуля.
У меня есть модель MVC на веб-сайте, над которой я работаю, и она выглядит так:
public class MvcModel
{
public Params Params { get; set; }
public Steps Steps { get; set; }
}
public class Params
{
public int? RequestId { get; set; }
public bool NewClient { get; set; }
}
public class Steps
{
public Step1 Step1 { get; set; }
public Step2 Step2 { get; set; }
public Step3 Step3 { get; set; }
}
public class Step1
{
public int Name { get; set; }
}
public class Step2
{
public int Phone { get; set; }
}
public class Step3
{
public int Email { get; set; }
}
С другой стороны, у меня есть следующий класс, который я должен перейти к какой-то службе:
public class Request
{
public Parameters Parameters { get; set; }
public RequestContent RequestContent { get; set; }
}
public class Parameters
{
public int NewClient { get; set; }
}
public class RequestContent
{
public int Id { get; set; }
public int InnerId { get; set; }
public string Session { get; set; }
public string Clerk { get; set; }
public bool Private { get; set; }
public PersonalDetails PersonalDetails { get; set; }
public Phones Phones { get; set; }
public ElectonicCommunication ElectonicCommunication { get; set; }
}
public class PersonalDetails
{
public int Name { get; set; }
}
public class Phones
{
public int Phone { get; set; }
}
public class ElectonicCommunication
{
public int Email { get; set; }
}
Я создал новый класс конфигурации AutoMapper (который вызывается из Global.asax):
public class AutoMapperConfig
{
public static void Configure()
{
MapperConfiguration MapperConfiguration = new MapperConfiguration(cfg => {
cfg.AddProfile<Out>();
cfg.AddProfile<In>();
cfg.CreateMap<MvcModel, Request>();
});
MapperConfiguration.AssertConfigurationIsValid();
}
}
public class Out: Profile
{
protected override void Configure()
{
CreateMap<MvcModel, Request>()
.ForMember(dest => dest.Parameters, opt => opt.MapFrom(src => src.Params))
.ForMember(dest => dest.RequestContent, opt => opt.MapFrom(src => src.Steps));
}
}
public class In: Profile
{
protected override void Configure()
{
CreateMap<Request, MvcModel>()
.ForMember(dest => dest.Params, opt => opt.MapFrom(src => src.Parameters))
.ForMember(dest => dest.Steps, opt => opt.MapFrom(src => src.RequestContent));
}
}
Они схематично похожи, хотя реальный объект немного больше и имеет разные имена.
Excpectations: MvcModel
быть сопоставленным сRequest
и в обратном направлении.
Чтобы быть более точным:
MvcModel.Params
быть сопоставленным сRequest.Parameters
и назадMvcModel.Steps
быть сопоставленным сRequest.RequestContent
и назадInnerId
, Session
, Clerk
, Private
отRequest.RequestContent
должны быть проигнорированыЭта проблема: Я получаю сообщение об ошибке при запуске приложения:
Следующее свойство на ... не может быть отображено:
Добавить пользовательское выражение сопоставления, игнорировать, добавить настраиваемый преобразователь или изменить тип назначения ... Контекст: сопоставление со свойством ... из ... в ... сопоставление из типа ... в ... из исходного типа AutoMapperMessageBugTests.SourceChild Сопоставление с типом Исключение типа 'AutoMapper.AutoMapperConfigurationException' было сгенерировано.
Я не нашел хорошей документации о том, как использовать AutoMapper в глобальном масштабе для приложения, и просто не могу понять, как правильно его использовать и что именно я делаю неправильно.
Я не мог найти хороший пример сложных объектов, отображающих эфир ...
Может кто-то помочь мне с этим?