这个映射
_mapper.Map<IEnumerable<SchedulerEventViewModel>>(response);
GetWorkShiftCurrentCachedResponse
给我这个错误:
System.TypeLoadException: Method 'GetEnumerator' in type 'Proxy_System.Collections.Generic.IEnumerable`1[[StoreManager.Web.Areas.Turnazione.Models.SchedulerEventViewModel, StoreManager.Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]_48512780_' from assembly 'AutoMapper.Proxies, Version=0.0.0.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005' does not have an implementation.
直接映射属性
events
有效:
_mapper.Map<IEnumerable<SchedulerEventViewModel>>(response.events);
那么,映射配置应该如何才能简单地映射整个对象(我认为它会起作用)并且在映射期间不指定 IEnumerable 属性
_mapper.Map<IEnumerable<SchedulerEventViewModel>>(response);
这些是课程:
public class GetWorkShiftCurrentCachedResponse
{
public IEnumerable<SchedulerEventCommandModel> events { get; set; }
}
public class SchedulerEventCommandModel
{
public string Title { get; set; }
public string Description { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public string RecurrenceRule { get; set; }
public string RecurrenceID { get; set; }
public string RecurrenceException { get; set; }
public bool IsAllDay { get; set; }
public int id { get; set; }
public int dipendenteId { get; set; }
public int idReparto { get; set; }
public int idPuntoVendita { get; set; }
public string stato { get; set; }
}
public class SchedulerEventViewModel
{
public string Title { get; set; }
public string Description { get; set; }
private DateTime start;
public DateTime Start
{
get
{
return start;
}
set
{
start = value.ToUniversalTime();
}
}
private DateTime end;
public DateTime End
{
get
{
return end;
}
set
{
end = value.ToUniversalTime();
}
}
public string RecurrenceRule { get; set; }
public string RecurrenceID { get; set; }
public string RecurrenceException { get; set; }
public bool IsAllDay { get; set; }
//custom fiels
public int id { get; set; }
public int dipendenteId { get; set; }
public int idReparto { get; set; }
public int idPuntoVendita { get; set; }
public string stato { get; set; }
}
这是映射定义:
CreateMap<SchedulerEventViewModel, SchedulerEventCommandModel>().ReverseMap();
CreateMap<GetWorkShiftCurrentCachedResponse, IEnumerable<SchedulerEventViewModel>>().ReverseMap()
.ForMember(o => o.events, b => b.MapFrom(x => x));
//i tried to be more explicit as well
//CreateMap<GetWorkShiftCurrentCachedResponse, IEnumerable<SchedulerEventViewModel>>().ReverseMap()
// .ForMember(o => o.events, b => b.MapFrom(x => x.AsEnumerable()));
//CreateMap<GetWorkShiftCurrentCachedResponse, IEnumerable<SchedulerEventViewModel>>().ReverseMap()
// .ForMember(o => o.events, b => b.MapFrom(x => x.AsEnumerable<SchedulerEventViewModel>()));
你应该使用 Custom Type Resolver 通过
ConvertUsing
正如@Lucian 提到的那样。
使用
ConvertUsing
时,不支持ReverseMap
方法。因此,您必须单独定义映射规则。
地图从
GetWorkShiftCurrentCachedResponse
到IEnumerable<SchedulerEventViewModel>>
.
地图从
IEnumerable<SchedulerEventViewModel>
到GetWorkShiftCurrentCachedResponse
.
CreateMap<GetWorkShiftCurrentCachedResponse, IEnumerable<SchedulerEventViewModel>>()
.ConvertUsing((src, dest, context) => context.Mapper.Map<IEnumerable<SchedulerEventViewModel>>(src.events));
CreateMap<IEnumerable<SchedulerEventViewModel>, GetWorkShiftCurrentCachedResponse>()
.ConvertUsing((src, dest, context) =>
{
dest = new GetWorkShiftCurrentCachedResponse();
dest.events = context.Mapper.Map<IEnumerable<SchedulerEventCommandModel>>(src);
return dest;
});