AutoMapper 忽略(不映射)所有空值

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

我正在使用 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
方法被召唤。当源值为空时,我想完全忽略地图。

c# .net-core mapping automapper
1个回答
0
投票

有时,当从 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));
© www.soinside.com 2019 - 2024. All rights reserved.