Automapper-以奇数结构映射来自XML的子级

时间:2018-11-29 21:03:40

标签: automapper

使用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>),然后遍历那些来构建孩子,但这似乎..混乱(并且有太多的属性无法使用元组)。希望有一个方法可以一步完成。

0 个答案:

没有答案