使用AutoMapper将XML映射到具有列表属性的对象

本文关键字:列表 属性 对象 AutoMapper XML 映射 使用 | 更新日期: 2023-09-27 17:51:12

我知道映射XML到强类型对象的正确方法的基础,但是我从服务接收到的XML是不同的!我的XMl是这样的:

<Group>
    <Title>friends</Title>
    <Member>
        <Name>Omid</Name>
    </Member>
    <Member>
        <Name>Kourosh</Name>
    </Member>
<Group>

和我的对象是:

public class Group
{
    public string Title { get; set; };
    public ICollection<Member> Members { get; set; };
}

所以当我尝试映射XElement(从XML)到组然后成员不映射:(最好的方法是什么?改变XML ?为AutoMapper使用特定的配置?以及如何?由于

使用AutoMapper将XML映射到具有列表属性的对象

我最终阅读了这篇有用的文章,并将_mapItems更改为以下内容来解决我的问题:

private static Func<XElement, string, List<XElement>> _mapItems =
    (src, elementName) =>
    src.Elements(elementName).ToList();

我阅读了同一篇文章,发现我的代码在XML格式上存在差异。我的选择是XML元素,而不是文章中建议的XML属性。如果有人需要更多信息,这里有一个StackOverflow链接。我的XML是基于元素的,而不是基于属性的。

我的XML如下所示,我的挑战是读取多个帐户

<consumer>
<id>XYZ</id>   
<birthDate>1990-05-22</birthDate>   
<accounts>
  <account>
    <id>123</id>
    <regdate>2014-05-22</regdate>        
  </account>
</accounts>

我的代码与文章中相同,但我将MapItems函数更改为以下

private static readonly Func<XElement, string, string, List<XElement>> MapItems =
        (src, collectionName, elementName) =>
        (src.Element(collectionName) ?? new XElement(collectionName)).Elements(elementName).ToList(); 

在进行映射时,我将其映射为如下

.ForMember(
                    dest => dest.Accounts,
                    opt => opt.MapFrom(src => MapItems(src, "accounts", "account")));