Excepción de mapeo de tipos complejos de Automapper
Estoy tratando de implementar el AutoMapper para un nuevo módulo.
Tengo el modelo MVC en el sitio web, estoy trabajando, y se ve así:
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; }
}
Por otro lado tengo la próxima clase, que tengo que pasar a algún servicio:
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; }
}
He creado una nueva clase de configuración de AutoMapper (que se llama desde 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));
}
}
Esos son esquemáticamente similares, aunque el objeto real es un poco más grande y tiene nombres diferentes.
Excpectaciones: MvcModel
ser mapeado aRequest
y al revés.
Para ser más exactos:
MvcModel.Params
ser mapeado aRequest.Parameters
y al revésMvcModel.Steps
ser mapeado aRequest.RequestContent
y al revésInnerId
, Session
, Clerk
, Private
deRequest.RequestContent
debe ser ignoradoEl problema: Recibo un error cuando inicio la aplicación:
La siguiente propiedad en ... no se puede asignar:
Agregue una expresión de asignación personalizada, ignore, agregue un solucionador personalizado o modifique el tipo de destino ... Contexto: Asignación a propiedad ... de ... a ... Asignación de tipo ... a ... de tipo fuente AutoMapperMessageBugTests.SourceChild Mapping to type Se ha lanzado una excepción del tipo 'AutoMapper.AutoMapperConfigurationException'.
No encontré buena documentación sobre cómo usar AutoMapper globalmente para la aplicación, y simplemente no puedo entender cómo usarlo correctamente y qué es exactamente lo que estoy haciendo mal.
No pude encontrar un buen ejemplo de objetos complejos que mapeen el éter ...
¿Puede alguien ayudarme con esto?