Вот код для картографа:выпуск с AutoMapper и картография IEnumerable коллекции
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);
}
Любые мысли? Благодаря!
что-то похожее и с другой технологией сопоставления, это может помочь мне: http://valueinjecter.codeplex.com/Thread/View.aspx?ThreadId=218448 – Omu
Спасибо - я пробовал аналогичный подход, но никуда не денутся. Я отправлю ответ, чтобы показать, что у меня получилось ... –