1
我有一个对象的集合,需要填充目标类中的集合。我已经尝试了一些东西,但完全没有。任何帮助,高度赞赏。 这里是源对象:Automapper:嵌套映射与收藏列表内
public class SourceClass
{
public Sessions SourceSessions { get; set; }
}
public class Sessions
{
public List<Session> SessionCollection { get; set; }
}
public class Session
{
public DateTime SessionInfo { get; set; }
}
和目标对象是:
public class DestinationClass
{
public List<DateTime> Sessions;
}
我需要填充DestinationClass使用AutoMapper。 我看到唯一可能的映射将发生在实际映射需要发生的Session和DestinationClass之间,但是,DestinationClass属性是Session内部whats的集合,但为了获得集合,我将它映射到Sessions对象相反,并试图写这样的自定义解析器:
public static class AutoMapperConfig
{
public static void RegisterMappings()
{
Mapper.CreateMap<Sessions, DestinationClass>();
}
}
public class CustomResolver : ValueResolver<Sessions, DestinationClass>
{
protected override DestinationClass ResolveCore(Sessions source)
{
DestinationClass dest = new DestinationClass();
List<DateTime> lstDates = new List<DateTime>();
foreach (Session session in source.SessionCollection)
lstDates.Add(session.SessionInfo);
dest.Sessions = lstDates;
return dest;
}
}
然后执行它就像下面不工作。无法理解其错误的地方。
private void button1_Click(object sender, EventArgs e)
{
Session session1 = new Session();
session1.SessionInfo = DateTime.Now;
Session session2 = new Session();
session2.SessionInfo = DateTime.Now;
Sessions sessions = new Sessions();
List<Session> lstSessions = new List<Session>();
lstSessions.Add(session1);
lstSessions.Add(session2);
sessions.SessionCollection = lstSessions;
SourceClass src = new SourceClass();
src.SourceSessions = sessions;
DestinationClass dest = new DestinationClass();
Sessions sessionsCopy = new Sessions();
sessionsCopy = src.SourceSessions;
Mapper.Map(sessionsCopy,dest);
MessageBox.Show(dest.Sessions[0].ToString());
}
嗨帕特里克..感谢您的帮助。不过,我确实了解你的方法,但我遇到了一个问题。这个不解析映射,因为DestinationClass是List,Session对象的SessionInfo只是DateTime。 –
user3836777
根据您原来的帖子,DestinationClass是一个包含列表的类,它本身不是列表。原始类定义不准确吗?如果您愿意,我可以使用您的原始源和目标类定义发布单元测试,以显示我的答案中所述的LINQ方法和Automapper方法。 –
PatrickSteele
它正确DestinationClass包含列表它正是根据我在原始查询中显示的类。我也使用映射,如你所示,但我得到的错误在var dest = Mapper.Map (src);. –
user3836777