簡體   English   中英

AutoMapper 8 ConvertUsing(Complex,string)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM