Automapper问题似乎忽略了属性

时间:2018-01-22 06:54:20

标签: c# mapping automapper

我正在使用Automapper版本6.2.2,而且我遇到了两个类之间映射的问题。 Automapper在项目中用于所有“映射目的”,适用于除此之外的所有情况。

public class WeeklyVolume    
{    
    public DateTime Week    
}    

public class WeeklyVolumeViewModel    
{    
    public DateTime Date    
    public string Week    
}`

类之间的映射如下所示:

CreateMap<WeeklyVolumeViewModel, WeeklyVolume>()
        .ForMember(dest => dest.Week, opt => opt.MapFrom(src => src.Date))

CreateMap<WeeklyVolume, WeeklyVolumeViewModel>()
        .ForMember(dest => dest.Week, opt => opt.Ignore())
        .ForMember(dest => dest.Date, opt => opt.MapFrom(src => src.Week));

使用此映射时

Mapper.Map<IList<WeeklyVolumeViewModel>, IList<WeeklyVolume>>(weeklyVolumes));

抛出异常:

消息:AutoMapper.AutoMapperMappingException:映射类型时出错。

映射类型:

  • System.FormatException:v.44(0)不是DateTime的有效值。
  • System.FormatException:字符串未被识别为有效
  • 日期时间。从索引0开始有一个未知单词。

在映射中,将忽略来自WeeklyVolumeviewModel的字符串属性Week。虽然它的值“v.44(0)”(带有周数的格式化字符串)似乎仍然试图映射到WeeklyVolume Week属性,这是我猜测导致错误的。类之间的所有其他映射都很有效,但是这里似乎没有正常运行,或者我错过了什么?

通过使用

设置所有映射
Mapper.Initialize(cfg => cfg.Addprofile(new DummyMapperclass());

1 个答案:

答案 0 :(得分:0)

我要改变的第一件事是

public class WeeklyVolume    
{    
    public DateTime Week {get; set;}
}    

public class WeeklyVolumeViewModel    
{    
    public DateTime Date {get; set;}
    public string Week   {get; set;}
}

然后,让我们看看字段名称:您有两个具有相同名称但具有不同类型的字段。这可能会使Automapper感到困惑。他会尝试转换这些字段。

您可以尝试将WeeklyVolume上的'Week'更改为'Date',并将所有映射'Date'删除为'Date' - &gt; Automapper会自动完成所有事情。

OR 您可以尝试将字段名称Week(其中一个)更改为Week2。

让我知道结果。