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