AutoMapper null 源值和自定义类型转换器,无法映射?

2024-02-04

当将自定义类型转换器 (ITypeConverter) 与 AutoMapper 一起使用时,如果源值为null, e.g:

Mapper.CreateMap<string, Enum>().ConvertUsing<EnumConverter>();

Assert.AreEqual(Enum.Value1, Mapper.Map<Enum>("StringValue1"));
Assert.AreEqual(Enum.Value1, Mapper.Map<Enum>(null);
Assert.AreEqual(Enum.Value1, Mapper.Map<Enum?>(null);

类型转换器看起来像:

public class EnumConvertor: ITypeConverter<string, Enum>
{
    public Enum Convert(ResolutionContext context)
    {
        string value = (string) context.SourceValue;

        switch (value)
        {
            case "StringValue2":
                return Enum.Value2;
            case "StringValue3":
                return Enum.Value3;
            case "StringValue1":
            default:
                return Enum.Value1;
        }
    }
}

最后两种情况的结果是:

Assert.AreEqual(Enum.Value1, Mapper.Map<Enum>(null);

0 - 不是有效的枚举值

Assert.AreEqual(Enum.Value1, Mapper.Map<Enum?>(null);

Null

从调试到测试,在这两种情况下,自定义 TypeConverter 永远不会被命中,并且 AutoMapper 似乎在映射器中进行了一些初始检查以进行映射,而无需求助于 TypeConverter?

如果我指定一个空字符串(“”),测试将按预期工作。


快速浏览一下 automapper 的源代码,Mapper.Map(object source) 会进行 null 检查。如果 source 为 null 它将返回 T 的默认值:

    public TDestination Map<TDestination>(object source, Action<IMappingOperationOptions> opts)
    {
        var mappedObject = default(TDestination);
        if (source != null)
        {
            var sourceType = source.GetType();
            var destinationType = typeof(TDestination);

            mappedObject = (TDestination)Map(source, sourceType, destinationType, opts);
        }
        return mappedObject;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AutoMapper null 源值和自定义类型转换器,无法映射? 的相关文章

  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 为什么 gcc 抱怨“错误:模板参数 '0' 的类型 'intT' 取决于模板参数”?

    我的编译器是gcc 4 9 0 以下代码无法编译 template
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看

随机推荐

  • SKLearn KMeans 收敛警告[重复]

    这个问题在这里已经有答案了 我在一维数据集上使用 SKLearn 的 KMeans 聚类 我遇到的错误是 当我运行代码时 我得到一个ConvergenceWarning ConvergenceWarning Number of distin
  • Pinterest Api 限制返回的 pin 数量

    使用此请求获取 Pinterest Api 用户的 pin 来自pinterest API 文档 https stackoverflow com questions 9951045 pinterest api documentation h
  • 泛型,其中 T 是实现接口的类

    我有一个界面 interface IProfile 和一个类 Serializable class Profile IProfile private Profile private to ensure only xmlserializer
  • 查看用户最近执行的Android任务

    我想查看我的 Android 手机最近的任务 我尝试了一些来自互联网的代码 但没有一个能正常工作 我只想获取用户最后执行的应用程序的PID和名称 例如 如果我执行计算器应用程序 然后执行我创建的最近任务应用程序 则该应用程序应该能够告诉我类
  • 本地时间(以毫秒为单位)

    我怎样才能通过图书馆提升获得当前时间 我可以做这个 ptime now boost posix timesecond clock local time tm d tm to tm now 但最后一个时间单位tm结构是第二位 我需要以毫秒为单
  • 用于 Git 更新的 RSS 提要

    是否有我可以订阅的 RSS Atom 提要或 Git 更新邮件列表 我发现很难跟上最新版本 因为我无法知道新版本何时发布 对于 msysgit Windows 端口 它只是 Google Code 提供的 feed http code go
  • 可以停止由 VIsual Studio 2015 生成 *.ipdb *.iobj 文件吗?

    在 Visual Studio Community 2015 中 Visual C 项目在其 Release 文件夹中生成 ipdb 文件和 iobj 文件 现在在 Visual Studio Community 2013 中 我从未见过在
  • C++ 重载运算符 [ ][ ]

    我有 CMatrix 类 其中是指向值数组的 双指针 class CMatrix public int rows cols int arr 我只需要通过键入以下内容来访问矩阵的值 CMatrix x x 0 0 23 我知道如何使用以下方法
  • Django - 改变迁移中的基础

    由于某些原因 我想对我的模型进行重大更改 我想以某种方式重新设计我的整个设计 但 Django 迁移实现通过不更新我的模型库来记住以前的设计 让我快速展示一下我以前拥有的和现在拥有的 app1 TopLevel app1 Intermedi
  • 将日期和整数合并到 ARRAY 中

    如何选择array agg ARRAY f1 date ARRAY f2 int f3 decimal 合并时出现错误date and integer在数组中 upd 添加了图片解释我计划在何处以及如何使用数组 问题是数据库大小 将 3 列
  • Python安装编译错误

    我希望有人可以帮助我 因为我已经被困在这个问题上有一段时间了 而且我对编译包不太熟悉 尝试安装以下软件包 https github com jhkorhonen MOODS wiki Installation https github co
  • 强制关闭 COM 端口

    我正在开发一个使用 COM 端口与外部控制器通信的应用程序 当我在连接通信电缆的情况下重新启动电脑时 Windows 7 打开该端口 但没有运行任何应用程序 因此我无法再访问它 我尝试以编程方式关闭它 但它仍然被占用 任何人都知道如何强制它
  • “VisualTree”被设置多次

    我在这个 xaml 文件中不断收到错误 属性 VisualTree 被设置多次
  • 两个视图 多个 UIPickerViews 单个出口

    我的应用程序有两个视图 具体取决于它决定加载哪个视图的方向 但是IB不允许我将两个PickerView连接到同一个OUTLET 有没有一种方法可以在代码中分配连接 以便在加载视图时将连接分配给outlet 或者我应该为每个视图做两次 或者我
  • 异常:ASP.NET MVC 控制器中的“值不在预期范围内”[重复]

    这个问题在这里已经有答案了 我有这个字符串要格式化 并且该部分抛出异常 字符串主体 private Task SendEmailConfirmation UserModel user var emailService new EmailUn
  • 执行特定的 Maven 阶段

    有没有办法执行 Maven 构建中的特定阶段 例如 如果我只想运行那些在预集成阶段执行的插件 Maven 是否提供了一种方法来做到这一点 e g mvn pre integration phase 您不能调用生命周期阶段本身 但可以调用绑定
  • 如何在后面的代码中添加两个CSS Class来控制?

    我在 ASP NET 后面的代码中设置 2 个 css 类 我可以这样做 txtBox Attributes Add class myClass1 txtBox Attributes Add class myClass2 它总是应用一个类
  • 无法更新 RVM - “致命:无法找到‘http’的远程帮助程序”

    我在 Ubuntu 8 04 上运行 RVM 1 1 6 突然无法再更新到最新版本 rvm get head Original installed RVM version rvm 1 1 6 by Wayne E Seguin email
  • 如何在 Matplotlib 中的绘图内绘制轴线?

    当我使用 Matplotlib 绘制数据时 默认情况下 轴始终绘制为框架图的框 假设我正在轴限制内绘制数据 2 lt x lt 2 and 2 lt y lt 2 但我想通过原点在该绘图区域内绘制轴线 最好沿着这些轴线绘制刻度线和刻度标签
  • AutoMapper null 源值和自定义类型转换器,无法映射?

    当将自定义类型转换器 ITypeConverter 与 AutoMapper 一起使用时 如果源值为null e g Mapper CreateMap