You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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);

关键说明

  1. 覆盖可空类型:你的ViewModel使用的是DateTime?,之前仅配置了非可空的DateOnly与DateTime映射,Mapster无法自动推导可空类型的转换逻辑,必须显式配置可空类型组的映射规则。
  2. 不可变类型适配:DateOnly和DateTime均为不可变值类型,Mapster要求这类类型的全局转换必须通过MapWith明确指定实例创建逻辑,这也是你之前报错的核心原因——虽使用了MapWith但遗漏了可空类型的配置,导致转换时匹配不到有效规则。

配置完成后,所有Model与ViewModel之间的同名DateOnly/DateTime?属性会自动完成转换,无需再为每一对类单独配置映射。

内容的提问来源于stack exchange,提问作者PapaStoke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 03:42:45