2011-07-21 55 views
6

我需要使用AutoMapper進行特殊映射的幫助。我想將一組對象映射到一組字符串。AutoMapper:將Object的集合映射到字符串集合

所以我有一個標籤D類

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 ... u想更多的細節。這裏u得到它..但我有縮短;)

所以型號:

public class Artocle 
{ 
    public Guid Id { get; set; } 
    public string Title {get; set; } 
    public string Text { get; set; } 
    public IList<Tag> Tags { get; set; } 
} 

你可以在上面看到標籤模型。

我想將其映射到ArticleView ...我只需要標記模型用於某些業務環境,而不是用於輸出。

因此,這裏的視圖模型我需要映射到:

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 :-) 
} 

所以,我對於映射一個引導程序。我的映射是這樣的:

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); 
    } 
+0

你能提供更多關於源和目標類的信息嗎? –

+0

這就是我所做的:)我希望我的版本可以幫助:) – Smokefoot

回答

13

manuelly它映射單元測試驗證,以下將映射自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())); 
+1

該死的..它的這麼容易^^非常感謝你對這種方式havnt思想:D *恥辱* – Smokefoot

+0

歡迎您。我也添加了一個簡短的選項。 –

+1

哦,你的第二個選擇是偉大的。非常感謝你。 – Smokefoot