AutoMapper 根据其他模型属性值映射所有属性
Posted
技术标签:
【中文标题】AutoMapper 根据其他模型属性值映射所有属性【英文标题】:AutoMapper Map all properties based on other model property value 【发布时间】:2019-04-12 22:37:39 【问题描述】:我有以下情况:
源类:
public class Source
public int? A get; set;
public int? B get; set;
public int? C get; set;
目标类:
public class Destination
public int A get; set;
public bool AIsNull get; set;
public int B get; set;
public bool BIsNull get; set;
public int C get; set;
public bool CIsNull get; set;
我想通过以下方式从 Source => Destion 获取映射:
尝试使用关联的源属性设置目标属性(这可以使用转换器完成(实现 ITypeConverter) 属性设置后,我想根据可为空的源属性设置目标关联的IsNull属性。编辑,经过一番研究:
class Program
static void Main(string[] args)
var srcClass = new SourceClass Value1 = 10, Value2 = null, Value3 = 20 ;
Mapper.Initialize(cfg =>
cfg.ClearPrefixes();
cfg.RecognizePostfixes("IsNull");
cfg.CreateMap<SourceClass, TargetClass>();
);
var targetClass = Mapper.Map<SourceClass, TargetClass>(srcClass);
public class SourceClass
public int? Value1 get; set;
public int? Value2 get; set;
public int? Value3 get; set;
public class TargetClass
public bool Value1IsNull get; set;
public bool Value2IsNull get; set;
public bool Value3IsNull get; set;
然而,这种情况并没有发生魔法
【问题讨论】:
RecognizeDestinationPostfixes 应该可以帮助您映射 IsNull 属性。 它没有多大帮助,或者我不知道如何使用它。我这样说是因为我只有目标模型的 IsNull 属性。 docs.automapper.org/en/latest/… 请看我的场景,不一样 不,其实很相似,你只需要考虑一下。浏览 AM 存储库中的相关测试。 【参考方案1】:我认为这样的东西应该可以工作,我没有在 VS 中测试过,所以用一粒盐。
var map = CreateMap<Source,Target>();
map.ForAllMembers(opt => opt.Ignore());
map.ForMember(dest => dest.A, opt => opt.MapFrom( src => src.A.HasValue ? src.A.Value : 0));
map.ForMember(dest => dest.AIsNull, opt => opt.MapFrom( src => src.A.HasValue ? true : false));
【讨论】:
我明白你的意思,我认为这是我正在寻找的东西......但是我有 100 个属性是什么?有没有办法以通用方式映射所有内容?以上是关于AutoMapper 根据其他模型属性值映射所有属性的主要内容,如果未能解决你的问题,请参考以下文章
[使用Automapper时,我是否也应该展平/映射视图模型的内部objetc?