Automapper - отображение детей из XML в нечетную структуру - PullRequest
0 голосов
/ 30 ноября 2018

Используя 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).Надеюсь, что есть способ сделать это за один шаг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...