【问题标题】:Automapper issue, seems to ignore mapping of propertyAutomapper 问题,似乎忽略了属性的映射
【发布时间】:2018-01-22 06:54:19
【问题描述】:

我使用的是 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());

【问题讨论】:

    标签: c# mapping automapper


    【解决方案1】:

    我要改变的第一件事是

    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' -> Automapper 会自动执行所有操作。

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

    让我知道结果。

    【讨论】:

    • 您好,感谢您的回复!我已经尝试重命名“周属性”之一,然后 Automapper 处理它并且它工作正常。虽然我觉得这并没有真正解决问题,只是隐藏了症状。 Automapper 不应该使用我创建的忽略映射来处理属性的不同数据类型吗?如果它无法处理,我将不得不重命名它,但我更愿意看看是否有办法在不同的数据类型之间进行映射。
    • FWIW,我遇到了同样的问题。如果名称在 src 和目标上匹配,Automapper 似乎会忽略您的自定义映射设置,它将使用该值而不是调用您的映射。我仍在寻找解决方案,如果您找到的话。
    • 在我输入上述评论后的几秒钟内,我发现stackoverflow.com/questions/55454059/… 是我的答案。
    猜你喜欢
    • 1970-01-01
    • 2017-02-19
    • 2017-12-31
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    相关资源
    最近更新 更多