【发布时间】:2011-09-08 11:30:24
【问题描述】:
这是映射器的代码:
public IEnumerable<GetQuestionsContract> Map(IEnumerable<XmlNode> nodes, XmlNamespaceManager namespaceManager)
{
Mapper.CreateMap<XmlNode, GetQuestionsContract>()
.ForMember(
dest => dest.Id,
options =>
options.ResolveUsing<XmlNodeResolver<string>>().FromMember(
source => source.SelectSingleNode("//wfauth60xsd:questionID", namespaceManager)))
.ForMember(
dest => dest.Question,
options =>
options.ResolveUsing<XmlNodeResolver<string>>().FromMember(
source => source.SelectSingleNode("//wfauth60xsd:question", namespaceManager)));
return Mapper.Map<IEnumerable<XmlNode>, List<GetQuestionsContract>>(nodes);
}
虽然这可行,但它似乎只会多次返回 IEnumerable 列表中的第一个元素(与它们在 XmlNodeList 中的项目一样多)。
更新:我已经简化了代码并更新了标题。如果我映射到一个 XmlNode,该场景就可以正常工作,但枚举似乎是一个问题。例如,下面的代码就可以正常工作:
public SomeIdContract Map(XmlDocument document, XmlNamespaceManager namespaceManager)
{
Mapper.CreateMap<XmlDocument, SomeIdContract>()
.ForMember(
dest => dest.Id,
options =>
options.ResolveUsing<XmlNodeResolver<string>>().FromMember(
source => source.SelectSingleNode("//wfauth60msgs:someID", namespaceManager)));
return Mapper.Map<XmlDocument, SomeIdContract>(document);
}
有什么想法吗?谢谢!
【问题讨论】:
-
有点相似,使用另一种映射技术,我认为它可能会有所帮助:valueinjecter.codeplex.com/Thread/View.aspx?ThreadId=218448
-
谢谢 - 我尝试了类似的方法,但无法到达任何地方。我将发布回复以显示我的工作内容......
标签: c# .net automapper