【问题标题】:Using mapping tool when source and destination differ in shape and names当源和目标的形状和名称不同时使用映射工具
【发布时间】:2023-03-22 16:48:02
【问题描述】:

我需要将一个对象映射到另一个源类型和目标类型在形状和成员名称方面差异很大的对象。下面是一个映射示例:

var source = new Source();
var dest = new Destination
{
    PropertyA = new SomeTypeA
        {
            PropertyB = new SomeTypeB
                {
                    DestinationProperty = source.SourceProperty
                }
        }
};

在此示例中,SomeTypeA 在 Source 类型中没有任何对应的类型,而 SomeTypeB 只有一个属性在 Source 中具有对应的属性,即 SourceProperty。因此,源对象和目标对象存在相当大的差异。

我的问题是:有没有像 AutoMapper 这样的映射工具非常适合在这里进行映射,还是手动映射更合适?

【问题讨论】:

  • 你有什么理由不能只使用自动映射器吗?

标签: c# .net automapper


【解决方案1】:

Automapper 是基于常规的映射。因此,超出约定的所有内容都必须手动调整。如果映射的大部分内容都被约定所覆盖,那么一些特殊设置就没有错:

        Mapper.CreateMap<Source, Destination>()
            .AfterMap((s, d) => d.PropertyA.PropertyB.DestinationProperty = s.SourceProperty);

当然,如果您不需要为目标类型中的每个属性以这种方式进行映射,那么这是有道理的。在这种情况下,与使用任何映射工具相比,自定义映射可能不会那么糟糕。

【讨论】:

    【解决方案2】:

    您可以使用 AutoMapper 并手动为每个属性设置映射。但是,如果您的对象非常复杂,这可能会很笨拙并且不理想。所以这取决于。 :-)

    另一种方法是手动使用扩展方法来转换您想要转换的类型:

    public static Destination ToDestination(this Source source) {
     // convert here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多