AutoMapper: Mapping-eine Sammlung von Objekt, um eine Auflistung von Zeichenfolgen
Ich brauche Hilfe mit einem speziellen mapping mit AutoMapper. Ich möchte die Karte eine Sammlung von Objekten, um eine Auflistung von Zeichenfolgen.
Also ich habe einen Tag classd
public class Tag
{
public Guid Id { get; set; }
public string Name {get; set; }
}
Als in einem Modell, das ich haben ein IList dieser Klasse. Jetzt möchte ich die Karte der name ist eine Sammlung von strings.
Das ist, wie ich definieren der mapping-Regel:
.ForMember(dest => dest.Tags, opt => opt.ResolveUsing<TagNameResolver>())
Und hier ist mein ValueResolver:
protected override string ResolveCore(Tag source)
{
return source.Name;
}
Aber u know.. es wird nicht funktionieren 😉 Also vielleicht jemand wissen, wie es richtig zu tun und kann mir helfen.
thx alot
Jan
Sooo.. u wollte mehr details.. hier u es bekommen.. aber ich habe zu verkürzen 😉
Also das Modell:
public class Artocle
{
public Guid Id { get; set; }
public string Title {get; set; }
public string Text { get; set; }
public IList<Tag> Tags { get; set; }
}
Und das Tag-Modell u kann siehe oben.
Ich möchte die Karte an einem ArticleView... ich muss den tag-Modell nur für einige business-Kontext, auch nicht für ddie Ausgabe.
So, hier ist das ViewModel ich brauche die Karte um:
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 :-)
}
Also ich habe einen BootStrapper für die Zuordnungen. Mein Mapping sieht so aus:
Mapper.CreateMap<Article, ArticleView>()
.ForMember(dest => dest.Tags, opt => opt.ResolveUsing<TagNameResolver>())
Und ich Karte es manuelly mit einer speziellen Methode
public static ArticleView ConvertToArticleView(this Article article)
{
return Mapper.Map<Article, ArticleView>(article);
}
- Können Sie uns mehr Infos über die Quell-und Ziel-Klassen?
- So das ist alles, was ich tun 🙂 ich hoffe, dass meine Ausgabe helfen könnte 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem unit-test überprüft die folgende Karte von IList
<Tag>
zu IList<string>
Dies ist ein kürzerer Weg der Erstellung der Karte:
ForPath
wie diese:.ForPath(d => d.Person.Name, opt => opt.MapFrom(o => o.PersonComplaint.Select(t => t.Complainer.ToString()).ToList()))
- gleiche Abfrage wie @EdCharbeneau vorgeschlagen, sondern eine andere Methode.