Automapper能否将动态对象映射到比映射源类少的属性?
创始人
2024-09-23 13:31:36
0

可以使用Automapper的Conditional Mapping特性来解决此问题。在此示例中,我们将源对象映射到目标对象,但是源对象比目标对象具有更多的属性。

首先,我们需要创建一个映射配置,然后使用条件映射来检查源对象是否具有目标对象所需的属性。如果源对象包含所需的属性,则使用该属性进行映射,否则使用默认值。

下面是代码示例:

// 定义目标类
public class DestinationObject
{
    public int Id {get; set;}
    public string Name {get; set;}
}

// 创建一个动态对象
dynamic source = new ExpandoObject();
source.Id = 1;

// 创建映射
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap()
       .ForMember(dest => dest.Name, opt => opt.Condition(src => ((dynamic)src).ContainsKey("Name")))
       .ForMember(dest => dest.Name, opt => opt.MapFrom(src => ((dynamic)src).Name));
});

// 映射对象
var mapper = config.CreateMapper();
var destination = mapper.Map(source);

// 输出结果
Console.WriteLine(destination.Id); // 1
Console.WriteLine(destination.Name); // null

在上面的示例中,我们创建了一个动态对象source并给其添加了Id属性。我们还创建了一个映射配置,该配置指定了必要的条件映射,以便只有当源对象包含名称属性时才映射该属性。

最后,我们使用mapper.Map()方法,将源对象映射到目标对象并输出结果。在此示例中,由于源对象不包含Name属性,因此目标对象的Name属性值为null。

相关内容

热门资讯

透视揭露!德州来玩辅助器(透视... 透视揭露!德州来玩辅助器(透视)hhpoker辅助挂是真的吗,教程绝活儿(有挂分析)-哔哩哔哩在进入...
透视有挂!wepoker私人局... 透视有挂!wepoker私人局辅助器怎么用(透视)hhpkoer辅助器视频,教程指南书(有挂秘笈)-...
透视推荐!aapoker透视怎... 透视推荐!aapoker透视怎么用(透视)智星德州插件2024最新版,教程法子(真的有挂)-哔哩哔哩...
透视普及!hhpoker透视码... 透视普及!hhpoker透视码(透视)aapoker公共底牌,教程模板(有挂规律)-哔哩哔哩1、上手...
透视揭露!hhpoker有没有... 透视揭露!hhpoker有没有开挂(透视)pokemmo辅助器手机版下载,教程步骤(有挂秘诀)-哔哩...
透视了解!hhpkoer辅助挂... 透视了解!hhpkoer辅助挂是真的吗(透视)哈糖大菠萝攻略,教程学习(证实有挂)-哔哩哔哩1、金币...
透视解迷!约局吧怎么看有没有挂... 透视解迷!约局吧怎么看有没有挂(透视)wepoker有没有机器人,教程窍门(确实有挂)-哔哩哔哩亲,...
透视推荐!wepokerplu... 透视推荐!wepokerplus透视脚本免费(透视)菠萝德州透视脚本,教程教材(存在有挂)-哔哩哔哩...
透视辅助!wepoker辅助器... 透视辅助!wepoker辅助器安装包(透视)wepoker插件程序激活码,教程阶段(有挂分析)-哔哩...
透视总结!wepoker安装教... 透视总结!wepoker安装教程(透视)约局吧开挂神器是真的吗,教程方式(有挂猫腻)-哔哩哔哩所有人...