【问题标题】:Map same source type against multiple target types based on a discriminator基于鉴别器将相同的源类型映射到多个目标类型
【发布时间】:2018-01-18 12:43:26
【问题描述】:

假设我有这样的课程:

public class A
{
   public IDictionary<string, object> Arguments { get; } = new Dictionary<string, object>
   {
       ["entity"] = "teams"
   }

   public string PropertyA { get; set; }
   public string PropertyB { get; set; }
}

我想将它映射到基于Arguments["entity"]BCD 类型:

config.CreateMap<A, B>();
config.CreateMap<A, C>();
config.CreateMap<A, D>();

我有什么方法可以使用 AutoMapper 完成此任务吗?

【问题讨论】:

  • 您希望如何使用它?不太确定您要达到的目标。
  • @DavidG 也许在执行映射时将此类鉴别器作为参数传递...我现在不确定。
  • 但是在做映射的时候你肯定还需要知道目的地类型吗?例如var newObject = Mapper.Map&lt;OldType, ???&gt;(currentObject)? (现在不记得语法了,因为我使用 AutoMapper 已经有一段时间了!)
  • @DavidG 好吧,它可以从使用中自动推断出来。但这不是问题。在映射配置期间,您将提供一些鉴别器,例如config.CreateMap&lt;A, B&gt;().UsingDiscriminator(source =&gt; source.Args["entity"]),稍后您将执行此操作:mapper.Map&lt;A, B&gt;(source =&gt; source.Args["entity"])。谁知道,我没有发现 AutoMapper 是否可以处理这样的事情。
  • 但是我是说你不能从用法中推断出来,你需要告诉 AutoMapper 目标类型是什么,映射函数实际返回的类型是什么?

标签: c# .net mapping automapper


【解决方案1】:

我们需要一个更现实的用例。但如果您觉得这已经足够接近,解决方案是自己创建目标对象,然后映射到现有对象。通常这样的事情是用 Include 来处理的。但是您需要一个源和目标层次结构。另见this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2016-06-27
    相关资源
    最近更新 更多