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