AutoMapper - 将所有空值映射到空字符串

问题描述 投票:0回答:1

出于兼容性原因,我需要映射(最好使用 AutoMapper)一些源 POCO,它可以包含不同的可空属性,如

DateTime?
bool?
或其他任何属性(因为在源应用程序中存在三元逻辑),但对于 DTO我需要将它们全部映射到具有相同属性集的对象,其中所有这些都只是字符串。并且 null 值需要用空字符串替换。

那么这意味着我需要这样:

来源:

TerminationDate DateTime?
...
null

目的地:

TerminationDate string
...
""

我需要对所有属性、所有可为空的类型执行此操作。我还没有找到任何合适的方法来配置 AutoMapper 来做到这一点,而无需一一检查所有属性(我想避免这种情况,因为名称完全匹配)。 我知道可以将全局地图设置为

CreateMap<string,string>().Convert..(....)
但它会破坏
null -> null
映射合法的所有其他映射。

我正在寻找类似的东西:

mapper.CreateMap<Source,Destination>().ForAllMembersMappingBetweenTypes<DateTime?,string>(UseTheConversion) 

也许我可以使用反射来构建表达式,但这看起来有点沉重。

c# .net automapper automapping
1个回答
0
投票

最简单的方法是对所有可空值进行全局操作。

    cfg.CreateMap(typeof(Nullable<>), typeof(string)).ConvertUsing(s => s == null ? "" : s.ToString());

您甚至可以编写一个通用类型转换器来避免装箱。

如果您只想将其用于特定映射,则需要

ForAllMembers
为每个属性对应用转换器,可空到字符串。太乱了。你需要将其与手工进行比较,这真的是一种改进吗?

© www.soinside.com 2019 - 2024. All rights reserved.