使用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; } }