我需要有关使用 AutoMapper 进行特殊映射的帮助。我想将对象集合映射到字符串集合。
所以我有一个标签类
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;
}
但是你知道.. 它不起作用 ;-) 所以也许有人知道如何正确地做这件事并且可以帮助我。
非常感谢
更新到一月
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>())
然后我用一种特殊的方法手动映射它
public static ArticleView ConvertToArticleView(this Article article)
{
return Mapper.Map<Article, ArticleView>(article);
}
最佳答案
单元测试验证了以下内容将从 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;
}
}
这是创建 map 的一种较短的方法:
.ForMember(dest => dest.Tags, opt => opt.MapFrom(so => so.Tags.Select(t=>t.Name).ToList()));
关于c# - AutoMapper:将对象集合映射到字符串集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6781795/