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