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

Web API中自定义Json反序列化转换器未触发、断点不命中问题

问题根因与解决方案

1. 转换器未适配可空DateTime类型(核心原因)

你当前自定义MultiFormatDateConverter的CanConvert方法仅匹配非可空的DateTime类型,但业务类KipReport中的所有日期属性均为DateTime?可空类型,导致转换器无法被触发,Newtonsoft.Json会走默认日期解析逻辑,自然报格式错误。
修正CanConvert方法逻辑即可:

public override bool CanConvert(Type objectType)
{
    // 同时兼容DateTime和DateTime?可空类型
    return objectType == typeof(DateTime) 
           || Nullable.GetUnderlyingType(objectType) == typeof(DateTime);
}

2. 注意异常类型一致性

你当前在转换器中抛出的是System.Text.Json.JsonException,但你使用的是Newtonsoft.Json的序列化体系,建议统一改为抛出Newtonsoft的异常,避免后续异常捕获逻辑出错:

// 替换原异常抛出逻辑
throw new Newtonsoft.Json.JsonException($"Unable to parse \"{dateString}\" as a date.");

3. 字段映射校验

你提供的JSON示例中日期字段名为LastEdtDate(拼写缺少字母i),但业务类中属性名为LastEditDate,如果没有配置字段映射或忽略大小写,该字段会反序列化失败,建议修正JSON字段名或给属性加[JsonProperty("LastEdtDate")]特性匹配。

关于Task.Run的说明

Task.Run异步执行逻辑本身不会影响自定义转换器的生效,只要你在手动调用JsonConvert.DeserializeObject时显式传入了你构造的JsonSerializerSettings对象,不管是否在异步委托中执行,配置都会正常生效。如果你之前依赖ASP.NET Core的全局Newtonsoft配置,注意全局配置仅对控制器自动反序列化请求体的场景生效,手动调用反序列化必须显式传入配置对象。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 09:33:03