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

Newtonsoft DateFormatHandling返回日期格式错误问题求助

问题分析与解决方案

你遇到的问题是.NET 8 ASP.NET Core Web API中,配置Newtonsoft.Json使用MicrosoftDateFormat序列化DateTime,但实际返回ISO格式的日期字符串。以下是几个排查和解决方向:

1. 确认已安装NewtonsoftJson的NuGet包

.NET 8的ASP.NET Core默认使用System.Text.Json作为序列化器,要启用Newtonsoft.Json必须安装对应的NuGet包:

Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson -Version 8.0.x

或者在项目的.csproj文件中添加引用:

<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.4" />

如果未安装该包,AddNewtonsoftJson配置不会生效,API依然会使用System.Text.Json返回ISO格式日期。

2. 验证配置是否正确应用

可以在控制器中手动使用Newtonsoft.Json序列化DateTime,测试格式是否符合预期:

[Authorize]
[HttpGet("test")]
public IActionResult Test()
{
    DateTime date = DateTime.Now;
    var serializedDate = JsonConvert.SerializeObject(date, new JsonSerializerSettings 
    {
        DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
    });
    return Ok(serializedDate);
}

如果手动序列化返回的是"/Date(1706086605103+0100)/"格式,说明全局的AddNewtonsoftJson配置没有被正确加载,需要检查Program.cs中的配置顺序:确保AddControllers().AddNewtonsoftJson(...)是在所有控制器相关配置之前,且没有被后续的配置覆盖。

3. 排除其他序列化配置干扰

检查是否在Program.cs中同时配置了System.Text.Json的序列化选项(比如AddJsonOptions),如果存在可能会导致冲突。确保只保留AddNewtonsoftJson的配置,移除或注释掉System.Text.Json的相关配置。

4. 检查DateTime的时区与类型

如果返回的是DateTimeOffset类型,Newtonsoft.Json的MicrosoftDateFormat处理逻辑略有不同,但你代码中使用的是DateTime.Now,所以这个场景不适用。不过可以尝试将DateTime转换为UTC时间测试:

DateTime date = DateTime.UtcNow;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:57:13