【问题标题】:using AutoMapper for map XML to Object with List Property使用 AutoMapper 将 XML 映射到具有 List 属性的对象
【发布时间】:2015-08-13 18:54:48
【问题描述】:

我知道将 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 的特定配置? 如何? 谢谢

【问题讨论】:

    标签: c# xml automapper


    【解决方案1】:

    我终于阅读了this useful article 并将_mapItems 更改为这个来解决我的问题:

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

    【讨论】:

      【解决方案2】:

      我阅读了相同的article,发现我的代码存在 XML 格式差异。与文章中建议的 XML 属性相比,我的是 XML 元素。 如果有人需要更多信息,这里是 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")));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-03
        • 1970-01-01
        • 2017-06-17
        • 2020-09-02
        • 2017-04-07
        • 2017-05-24
        相关资源
        最近更新 更多