如何在Mapster中全局配置DateOnly与DateTime?属性的映射?
解决Mapster全局处理DateOnly与DateTime/DateTime?的映射问题
直接上可行的全局配置代码,覆盖非可空和可空类型的双向转换:
// DateOnly → DateTime TypeAdapterConfig<DateOnly, DateTime>.NewConfig() .MapWith(src => src.ToDateTime()); // DateTime → DateOnly TypeAdapterConfig<DateTime, DateOnly>.NewConfig() .MapWith(src => src.ToDateOnly()); // DateOnly? → DateTime? TypeAdapterConfig<DateOnly?, DateTime?>.NewConfig() .MapWith(src => src.HasValue ? src.Value.ToDateTime() : null); // DateTime? → DateOnly? TypeAdapterConfig<DateTime?, DateOnly?>.NewConfig() .MapWith(src => src.HasValue ? src.Value.ToDateOnly() : null);
关键说明
- 覆盖可空类型:你的ViewModel使用的是
DateTime?,之前仅配置了非可空的DateOnly与DateTime映射,Mapster无法自动推导可空类型的转换逻辑,必须显式配置可空类型组的映射规则。 - 不可变类型适配:
DateOnly和DateTime均为不可变值类型,Mapster要求这类类型的全局转换必须通过MapWith明确指定实例创建逻辑,这也是你之前报错的核心原因——虽使用了MapWith但遗漏了可空类型的配置,导致转换时匹配不到有效规则。
配置完成后,所有Model与ViewModel之间的同名DateOnly/DateTime?属性会自动完成转换,无需再为每一对类单独配置映射。
内容的提问来源于stack exchange,提问作者PapaStoke
相关产品推荐
相关产品推荐

