使用AutoMapper将对象的属性映射到字符串
我有以下型号:
public class Tag { public int Id { get; set; } public string Name { get; set; } }
我希望能够使用AutoMapper将Tag
类型的Name
属性映射到我的一个viewmodel中的字符串属性。
我已经创建了一个自定义解析器来尝试使用以下代码来处理此映射:
public class TagToStringResolver : ValueResolver { protected override string ResolveCore(Tag source) { return source.Name ?? string.Empty; } }
我使用以下代码进行映射:
Mapper.CreateMap() .ForMember(d => d, o => o.ResolveUsing());
当我运行应用程序时,我收到错误:
仅对类型上的顶级单个成员支持成员的自定义配置。
我究竟做错了什么?
这是因为您尝试映射到实际目标类型而不是目标类型的属性。 你可以实现你想要的:
Mapper.CreateMap().ConvertUsing(source => source.Name ?? string.Empty);
虽然在Tag类上覆盖ToString会简单得多。
ForMember表示您为要在类型之间进行映射的成员提供映射。 相反,使用这个:
Mapper.CreateMap().ConvertUsing();
和转换器是
public class TagToStringConverter : ITypeConverter { public string Convert(ResolutionContext context) { return (context.SourceValue as Tag).Name ?? string.Empty; } }