使用AutoMapper将地图XML映射到具有List属性的Object

时间:2015-05-31 06:11:23

标签: c# xml automapper

我知道将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)映射到Group时,会员不会映射:( 什么是最好的方式? 改变XML? 使用AutoMapper的特定配置? 如何? 感谢

2 个答案:

答案 0 :(得分:1)

我终于阅读this useful article并将_mapItems更改为此以解决我的问题:

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

答案 1 :(得分:0)

我读了同样的article,发现我的代码存在XML格式差异。与文章中建议的XML Attribute相比,Mine是XML Element。 如果有人需要更多信息,那么这是一个StackOverflow link。我的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")));