我正在尝试在映射期间清理字符串EmailInstructions
,但是当我使用以下方法调用Mapper.Configuration.AssertConfigurationIsValid();
时它失败了:
No coercion operator is defined between types 'System.String' and 'ElectionViewModel'
这是我的设置:
public class AutoMapperConfiguration
{
public static void Configure()
{
Mapper.Initialize(x =>
{
x.AddProfile<SystemProfile>();
});
Mapper.Configuration.AssertConfigurationIsValid();
}
}
我的映射器:
public class SystemProfile : Profile
{
public SystemProfile()
{
CreateMap<ElectionViewModel, Election>()
.ForMember(x => x.EmailInstructions, y =>
y.ConvertUsing(new EmailInstructionVariablesCleanerConverter()))
我的价值转换器
public class EmailInstructionVariablesCleanerConverter : IValueConverter<ElectionViewModel, string>
{
public string Convert(ElectionViewModel source, ResolutionContext context)
{
return CleanVariables(source.EmailInstructions);
}
private static string CleanVariables(string text)
{
return Clean the text here
}
}
我试图解决类似的错误,但我在此过程中发现了您的原因。我在这里通过填写一些缺失的细节来提供我的观察,以帮助其他可能仍然感到困惑的人。
您没有包括源类和目标类。由于 AutoMap per 的行为和您报告的错误,我假定您的目标类型Election
至少包含以下成员:
public class Election
{
public string EmailInstructions { get; set; }
}
使用映射表达式为该成员创建映射时
CreateMap<ElectionViewModel, Election>()
.ForMember(x => x.EmailInstructions, y => y.ConvertUsing(new EmailInstructionVariablesCleanerConverter()))
AutoMapper 匹配目标和源EmailInstructions
成员,然后选择要传递给EmailInstructionVariablesCleanerConverter
的源字符串EmailInstructions
,该字符串被定义为需要ElectionViewModel
类型作为源对象。由于在任一类型上都没有定义转换运算符来实现从string
到所需ElectionViewModel
对象的强制转换,因此表达式编译器引发"无强制运算符"异常。
鉴于这些细节,@Lucian建议将转换器替换为更合适的转换器:用于修改源字符串的值转换器;或者,将源字符串转换为新字符串的值转换器。