AutoMapper 8 ConvertUsing(Complex,string)



我正在尝试在映射期间清理字符串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建议将转换器替换为更合适的转换器:用于修改源字符串的值转换器;或者,将源字符串转换为新字符串的值转换器。

相关内容

  • 没有找到相关文章

最新更新