DestinationTransform.EmptyCollectionIfNull overrides explicit null mapping
还没有人认领这个 Issue。
- #960 来自 @wyf027 —— 已关闭,未合并
评估
调研方向
从 issue 中展示的 DestinationTransform.EmptyCollectionIfNull 注册和 DestinationTransformTests 用例开始,然后使用提供的 TypeAdapterConfig 以及 Foo/FooDto 类型重现该行为。跟踪全局 destination transform 相对于显式 .Map(...) 结果的执行时机;当测试通过且 foo.Strings 仍为 null 时即完成。
由索引模型根据 Issue 内容生成。
描述
When DestinationTransform.EmptyCollectionIfNull is configured globally via config.Default, it still overrides explicitly defined mappings that return null.
This behavior is unexpected because explicit mappings (via .Map(...)) should take precedence over global/default transforms.
- Mapster version: 10.0.8-pre06
- .NET version: net10.0
class FooDto
{
public string[]? Strings { get; set; }
}
record Foo(string?[] Strings);
public class DestinationTransformTests
{
[Fact]
public void ExplicitNullMapping_ShouldNotBeOverridden_ByDefaultEmptyCollectionTransform()
{
// Configure
var config = new TypeAdapterConfig();
config.Default
.AddDestinationTransform(DestinationTransform.EmptyCollectionIfNull);
config.NewConfig<Foo, FooDto>()
.Map(d => d.Strings, _ => (string[]?)null);
// Arrange
var fooDto = new Foo([]);
// Act
var foo = fooDto.Adapt<FooDto>(config);
// Assert
foo.Strings.ShouldBeNull();
}
}
Expected behavior
The explicit mapping:
.Map(d => d.Strings, _ => (string[]?)null)
should be respected, resulting in foo.Strings == null.
Actual behavior
foo.Strings is transformed into an empty array, meaning that EmptyCollectionIfNull is applied after the explicit mapping and overrides it.
Notes
The transform is registered on config.Default, not per-type.
This suggests that global destination transforms are applied at a stage where they override even explicit mapping results.
This makes it impossible to explicitly map a collection property to null when EmptyCollectionIfNull is enabled globally.
- 主要语言
- C#
- 星标
- 5.2k
- 派生
- 409
- 平均合并
- 3 天 4 小时
- 30 天内合并 PR
- 3
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
MapsterMapper/Mapster 的其他 Issue
-
.NET Matrix未关闭
难度 2/5 1-3 小时 新手友好度 72/100
MapsterMapper/Mapster#1003 ·
-
难度 3/5 1-2 天 新手友好度 58/100
MapsterMapper/Mapster#1024 · 1 条评论 ·
-
[Mapster Tool] Add support for global:: to disambiguate type names in generated mappers可能已有人在做 @DocSvartz 于 1 天前认领。 未关闭improvement
难度 3/5 1-2 天 新手友好度 65/100
MapsterMapper/Mapster#1020 · 3 条评论 ·
-
Mapster.Tool - PropertySettingBuilder.Map(member, mapFunc, targetPropertyName) method is not working as expected!可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭
难度 3/5 1-2 天 新手友好度 68/100
MapsterMapper/Mapster#1017 · 6 条评论 ·
-
难度 3/5 1-2 天 新手友好度 57/100
MapsterMapper/Mapster#1007 · 5 条评论 ·
查看 MapsterMapper/Mapster 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 66/100
gavin-wolfe/wolfden#104 ·
维护者通常 1 天内回复
-
[BUG] Still libmicrohttpd dependency is not removed properly from External-Dependency-Info.txt file未关闭type/bug
难度 1/5 1 小时以内 新手友好度 72/100
维护者通常 1 天内回复
-
area:framework
难度 1/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
[辞書] かんそうりつ->乾燥率未关闭辞書
难度 1/5 1 小时以内 新手友好度 62/100
维护者通常 1 天内回复
-
bug good first issue
难度 2/5 1-3 小时 新手友好度 76/100
thomhurst/TUnit#7201 · 1 条评论 ·
维护者通常 1 天内回复