防止Automapper将IEnumerable属性转换为List

4

我正试图将一个拥有从IEnumerable继承的属性类型的ViewModel映射到一个Model上。这些属性具有相同的类型和名称,但是Automapper会将源转换为一个泛型列表,然后无法映射到目标。

以下是我正在尝试映射的类:

BasicOverview
{
   public IRichTextContent Intro { get; set; }
   ...
}

BlogOverviewViewModel
{
   public IRichTextContent Intro { get; set; }
   ...
}

以下是第三方代码,其中定义了IRichTextContent类型:
//     Represents rich text content in a form of structured data
public interface IRichTextContent : IEnumerable<IRichTextBlock>, IEnumerable
{
    //
    // Summary:
    //     List of rich text content blocks
    IEnumerable<IRichTextBlock> Blocks { get; set; }
}

我的Automapper配置文件:

public AutomapperProfile()
    {
        CreateMap<BasicOverview, BlogListViewModel>();
        CreateMap<BasicOverview, ReviewListViewModel>();
        CreateMap<BasicOverview, BlogOverviewViewModel>();
    }

以下是我收到的错误信息:

处理请求时发生未处理的异常。 InvalidCastException: 无法将类型为“System.Collections.Generic.List`1[KenticoCloud.Delivery.IRichTextBlock]” 的对象强制转换为类型“KenticoCloud.Delivery.IRichTextContent”。 lambda_method(Closure , BasicOverview , BlogOverviewViewModel , ResolutionContext )

AutoMapperMappingException: 类型映射错误。

映射类型: BasicOverview -> BlogOverviewViewModel

类型映射配置: BasicOverview -> BlogOverviewViewModel

目标成员: Intro lambda_method(Closure , BasicOverview , BlogOverviewViewModel , ResolutionContext )

我尝试在我的Automapper配置文件中添加以下内容:

CreateMap<IEnumerable<IRichTextBlock>, IRichTextContent>()
            .ForMember(dest => dest.Blocks, m => m.MapFrom(src => src));

产生了以下错误:

TypeLoadException: 来自程序集 'AutoMapper.Proxies, Version=0.0.0.0, Culture=neutral, PublicKeyToken=abc123ef45' 的类型 'Proxy_KenticoCloud.Delivery.IRichTextContent_12345678_' 中的方法 'GetEnumerator' 没有实现。


1
你需要告诉AM,IRichTextContent的具体类型是什么。 - Lucian Bargaoanu
不幸的是,具体类型是第三方库中的内部类。 - meobyte
它只需要从IRichTextContent转换为IRichTextContent。 - meobyte
我无法操作,因为AutoMapper将IRichTextContent转换为List<IRichTextBlock>,而无法强制转换为IRichTextContent。 - meobyte
3
CreateMap<IRichTextContent, IRichTextContent>().ConvertUsing(s=>s); - Lucian Bargaoanu
显示剩余4条评论
1个回答

1

为了使Lucian Bargaoanu的评论更加突出,以下是其中一个解决方案:向Automapper配置文件添加以下映射:

CreateMap<IRichTextContent, IRichTextContent>().ConvertUsing(s=>s);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接