我需要帮助使用AutoMapper的特殊映射。我想将一组对象映射到一个字符串集合。
所以我有一个Tag分类
public class Tag
{
public Guid Id { get; set; }
public string Name {get; set; }
}
在模型中,我有一个这个类的IList。现在我想将名称映射到字符串集合。
这就是我如何定义映射规则:
.ForMember(dest => dest.Tags, opt => opt.ResolveUsing<TagNameResolver>())
这是我的ValueResolver:
protected override string ResolveCore(Tag source)
{
return source.Name;
}
但是你知道..它不起作用;-)所以也许有人知道如何做对,可以帮助我。
thx很多
扬
Sooo ..你想要更多细节..在这里你得到它......但我缩短了它;)
所以模型:
public class Artocle
{
public Guid Id { get; set; }
public string Title {get; set; }
public string Text { get; set; }
public IList<Tag> Tags { get; set; }
}
你可以看到Tag模型。
我想将它映射到ArticleView ...我只需要一些业务环境的标签模型,而不是输出。
所以这是我需要映射到的ViewModel:
public class ArticleView
{
public Guid Id { get; set; }
public string Title { get; set; }
public string Text { get; set; }
public IList<string> Tags { get; set; } // The mapping problem :-)
}
所以我有一个用于映射的BootStrapper。我的映射看起来像这样:
Mapper.CreateMap<Article, ArticleView>()
.ForMember(dest => dest.Tags, opt => opt.ResolveUsing<TagNameResolver>())
我用一种特殊的方法将它绘制成manuelly
public static ArticleView ConvertToArticleView(this Article article)
{
return Mapper.Map<Article, ArticleView>(article);
}
答案 0 :(得分:18)
单元测试验证以下内容将从IList <Tag>
映射到IList <string>
private class TagNameResolver : ValueResolver<IList<Tag>, IList<string>>
{
protected override IList<string> ResolveCore(IList<Tag> source)
{
var tags = new List<string>();
foreach (var tag in source)
{
tags.Add(tag.Name);
}
return tags;
}
}
这是创建地图的一种较短方式:
.ForMember(dest => dest.Tags, opt => opt.MapFrom(so => so.Tags.Select(t=>t.Name).ToList()));