[英]AutoMapper 8 ConvertUsing(Complex,string)
我試圖在映射期間清理一個字符串EmailInstructions
,但是當我調用Mapper.Configuration.AssertConfigurationIsValid();
時它失敗了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
}
}
我試圖解決一個類似的錯誤,但我已經發現了你的原因。 我在這里通過填寫一些缺失的細節來提供我的觀察,以幫助可能仍然感到困惑的其他人。
您沒有包含源類和目標類。 由於 AutoMapper 的行為和您報告的錯誤,我假設您的目標類型Election
至少包括以下成員:
public class Election
{
public string EmailInstructions { get; set; }
}
當您使用映射表達式為該成員創建映射時
CreateMap<ElectionViewModel, Election>()
.ForMember(x => x.EmailInstructions, y => y.ConvertUsing(new EmailInstructionVariablesCleanerConverter()))
AutoMapper 匹配目標和源EmailInstructions
成員,然后選擇源字符串EmailInstructions
傳遞給EmailInstructionVariablesCleanerConverter
,該字符串被定義為期望ElectionViewModel
類型作為源對象。 因為在任何一種類型上都沒有定義轉換運算符來實現從string
到所需ElectionViewModel
對象的強制轉換,所以表達式編譯器拋出了“無強制運算符”異常。
鑒於這些細節,@Lucian 建議您將轉換器替換為更合適的東西:一個用於修改源字符串的值轉換器; 或者,將源字符串轉換為新字符串的值轉換器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.