AutoMapper中List<string>转字符串失效,为何输出类型全名?
问题分析与解决
你的问题出在AutoMapper的ConvertUsing泛型参数使用错误,导致自定义转换器未被正确触发,AutoMapper默认执行了List<string>的ToString()方法,因此得到了System.Collections.Generic.List1[System.String]`这个非预期结果。
错误原因
你在映射配置中错误地给ConvertUsing指定了<List<string>>泛型参数:
CreateMap<Model, Entity>() .ForMember(dest => dest.Items, opt => opt.ConvertUsing<List<string>>(new ListToStringValueConverter()));
此处的泛型参数要么需要指定转换器的源类型+目标类型,要么直接省略泛型参数、传入转换器实例即可,单独指定源类型会导致AutoMapper无法识别正确的转换逻辑。
修复方案
以下两种写法都可以解决问题:
写法1:省略泛型参数,直接传入转换器实例
CreateMap<Model, Entity>() .ForMember(dest => dest.Items, opt => opt.ConvertUsing(new ListToStringValueConverter()));
写法2:指定转换器的完整泛型类型(源类型List<string>,目标类型string)
CreateMap<Model, Entity>() .ForMember(dest => dest.Items, opt => opt.ConvertUsing<List<string>, string>(new ListToStringValueConverter()));
验证效果
修改配置后,执行entity = _mapper.Map<Entity>(model);时,若Model的Items为["1","2"],Entity的Items将正确转换为"1,2"。
内容的提问来源于stack exchange,提问作者Harobed
相关产品推荐
相关产品推荐

