gpt4 book ai didi

c# - AutoMapper:将对象集合映射到字符串集合

转载 作者:可可西里 更新时间:2023-11-01 08:18:52 24 4
gpt4 key购买 nike

我需要有关使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com