zoukankan      html  css  js  c++  java
  • 08.AutoMapper 之嵌套映射(Nested Mappings)

    https://www.jianshu.com/p/013715d2352d

     

    嵌套映射(Nested Mappings)

    当映射引擎执行映射时,它可以使用各种方法之一来解析目标成员值。其中一种方法是使用另一种类型映射,其中源成员类型和目标成员类型也在映射配置中配置。这使我们不仅可以扁平化我们的源类型,还可以创建复杂的目标类型。例如,我们的源类型可能包含另一种复合类型:

    public class OuterSource
    {
        public int Value { get; set; }
        public InnerSource Inner { get; set; }
    }
    
    public class InnerSource
    {
        public int OtherValue { get; set; }
    }
    

    我们可以简单地将OuterSource.Inner.OtherValue扁平化为一个InnerOtherValue属性,但我们可能还想为Inner属性创建相应的复合类型:

    public class OuterDest
    {
        public int Value { get; set; }
        public InnerDest Inner { get; set; }
    }
    
    public class InnerDest
    {
        public int OtherValue { get; set; }
    }
    

    在这种情况下,我们需要配置其他源/目标类型映射:

    var config = new MapperConfiguration(cfg => {
        cfg.CreateMap<OuterSource, OuterDest>();
        cfg.CreateMap<InnerSource, InnerDest>();
    });
    config.AssertConfigurationIsValid();
    
    var source = new OuterSource
        {
            Value = 5,
            Inner = new InnerSource {OtherValue = 15}
        };
    var mapper = config.CreateMapper();
    var dest = mapper.Map<OuterSource, OuterDest>(source);
    
    dest.Value.ShouldEqual(5);
    dest.Inner.ShouldNotBeNull();
    dest.Inner.OtherValue.ShouldEqual(15);
    

    这里有几点需要注意:

    • 配置类型的顺序无关紧要
    • 调用Map不需要指定任何内部类型映射,只需要指定用于传入源值的类型映射

    通过扁平化和嵌套映射,我们可以创建各种类型的目标对象,以满足我们的需求。

  • 相关阅读:
    Verilog HDL的程序结构及其描述
    VerilogHDL概述与数字IC设计流程学习笔记
    常用算法与设计模式
    DOM笔录
    JavaScript笔录
    Windows系统版本型号MSDN版、OEM版、RTM版、VOL版区别
    Yaml学习笔录
    Linux关闭iptables以及selinux
    Centos配置163YUM源
    utf8 和 UTF-8 在使用中的区别
  • 原文地址:https://www.cnblogs.com/zengpeng/p/11059907.html
Copyright © 2011-2022 走看看