我有格式化程序
public class ColorFormatter : IValueFormatter
{
public string FormatValue(ResolutionContext context)
{
return "green"
}
}
Mapper.CreateMap<MyClass, MyViewModel>().ForMember(dest => dest.color, opt => opt.AddFormatter<ColorFormatter>());
MyClass没有任何名为bgColor但MyViewModel没有,我希望所有的bgColors都有“绿色”。
那为什么不被触发?
MYClass中的其他所有内容都成功映射到MyViewModel。
List<MyViewModel> vm = Mapper.Map<List<MyClass>, List<MyViewModel>>(myClasses);
[Serializable]
public class MyClass
{
public virtual int Id { get; private set; }
public virtual string Title { get; set; }
public virtual DateTime Start { get; set; }
public virtual DateTime End { get; set; }
public virtual string Description { get; set; }
public virtual string Where { get; set; }
public virtual bool AllDay { get; set; }
public virtual AnotherClass AnotherClass { get; set; }
public virtual int RepeatingId { get; set; }
}
public class MyViewModel
{
public int id { get; set; }
public string title { get; set; }
public bool allDay { get; set; }
public string start { get; set; }
public string end { get; set; }
public string color { get; set; }
public string appointmentId { get; set; }
public string textColor { get; set; }
}
答案 0 :(得分:0)
ValueFormatter仅在具有要格式化的源值时应用。如果您将Color属性添加到MyClass类,那么您将看到应用颜色“绿色”。我不确定这是否是一个AutoMapper错误,因为如果没有要映射的源值,它通常会抱怨。我猜它假设你申请.ForMember()然后它不再自动检查这些东西,它依靠你来确保映射是正确的。而不是使用ValueFormatter,使用ValueResolver返回如下字符串:
Mapper.CreateMap<MyClass, MyViewModel>().ForMember(dest => dest.color, opt => opt.ResolveUsing<ColorResolver>());
public class ColorResolver : ValueResolver<MyClass, string>
{
protected override string ResolveCore(MyClass source)
{
return "green";
}
}