Используя Automapper v8.0.0, я сопоставляю документ XML с записями, структурированными так:
<entity>
<parent_stat>1.5</parent_stat>
<parent_name>some name</parent_name>
<child_property>
<v idx="1">Child 1 Property 1</v>
<v idx="2">Child 2 Property 1</v>
</child_property>
<child_property_2>
<v idx="1">Child 1 Property 2</v>
<v idx="2">Child 2 Property 2</v>
</child_property_2>
</entity>
, и моя структура данных выглядит следующим образом:
class Parent {
decimal Stat {get;set;}
string Name {get;set;}
List<Child> Children { get; set}
}
class Child {
string Property1 {get;set;}
string Property2 {get;set;}
}
Итак, какВы можете видеть, что исходные данные - это дочерние значения свойств, сгруппированные по имени свойства, а моя структура назначения - более типичный формат «потомки со свойствами».Предположим, я не могу изменить структуру, это новый источник данных для существующих бизнес-классов.Я мог бы написать промежуточный класс, я думаю, но это кажется грязным.
Есть ли способ структурировать мою конфигурацию Automapper для сопоставления N-потомков родительской записи с учетом этой структуры?Я не могу разобраться с этим.
Для ясности, я успешно сопоставляю элементы XML с родительскими свойствами POCO уже с помощью специального распознавателя (см. Фрагмент ниже), это не мой вопрос.Я просто не могу понять, как «повернуть» значения дочерних свойств с помощью Automapper.
.ForMember(
p => p.Stat,
opt => opt.MapFrom(new Resolvers.XElementResolver<Parent, decimal>("parent_stat")))
Моя текущая идея состоит в том, чтобы создать промежуточный объект для сопоставления XML, который является такой же «структурой», что идочерние объекты, но обернутые как списки (например, Property1
становится List<decimal>
), а затем перебирают их для создания дочерних объектов, но это кажется .... грязным (и слишком много свойств, чтобы использовать Tuple).Надеюсь, что есть способ сделать это за один шаг.