使用AutoMapper一个对象的属性映射到一个字符串(Using AutoMapper to ma

2019-06-25 17:44发布

我有以下型号:

public class Tag
{
    public int Id { get; set; }
    public string Name { get; set; }
}

我希望能够使用AutoMapper到地图Name的财产Tag类型的字符串属性在我的ViewModels之一。

我创建了一个自定义的解析器试图处理这种映射,使用下面的代码:

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>());

当我运行应用程序,我得到的错误:

为成员的自定义配置仅支持的类型的顶层个人会员。

我究竟做错了什么?

Answer 1:

这是因为你正试图映射到实际的目标类型,而不是目标类型的属性。 你可以实现你想要什么:

Mapper.CreateMap<Tag, string>().ConvertUsing(source => source.Name ?? string.Empty);

虽然这将是一个简单得多只是重写的ToString的标签类。



Answer 2:

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


文章来源: Using AutoMapper to map the property of an object to a string