我正在使用 automapper v11 (C# net6) 我想忽略(不映射)所有字段的所有空值。
这里有一个例子
class SrcExample
{
public string? Name { get; set; }
public int? Age { get; set; }
}
class DestExample
{
public string Name { get; set; }
public int Age { get; set; }
}
var map = CreateMap<SrcExample, DestExample>();
map.ForAllMembers(opts => opts.Condition((src, dest, srcMember) => srcMember != null));
我正在尝试使用
opts.Condition
忽略(不是映射)所有空值,但它仅适用于 strings。
对于 int? 我得到了
srcMember = 0
而不是 srcMember = null
。似乎 Automapper 使用默认的 int 值作为 srcMember 值。
为什么 Automapper 会这样?
有没有办法(使用自动映射器)忽略(不映射)所有字段的所有空值。
这个问题(在 Automapper 6 中映射期间如何忽略所有源成员的空值?)无法解决问题,因为无论如何都会调用目标类上的
set
方法,(这里有一个示例,说明如何 set
方法被称为https://dotnetfiddle.net/1grZkZ)我想避免set
方法被召唤。当源值为空时,我想完全忽略地图。
有时,当从 Nullable 属性映射到 Non-Nullable 属性时,我们需要特定的映射配置,如下所示:
CreateMap<int?, int>().ConvertUsing((src, dest) => src ?? dest);
CreateMap<DateTime?, DateTime>().ConvertUsing((src, dest) => src ?? dest);
尝试在代码之前使用上面的示例:
map.ForAllMembers(opts => opts.Condition((src, dest, srcMember) => srcMember != null));