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

.NET Framework与.NET 6 Web API中DateTime返回格式差异及兼容问询

让.NET 6 Web API兼容.NET Framework DateTime序列化行为

问题背景

你的场景中,.NET Framework 4.7.2会将Kind=Unspecified的DateTime序列化为带Z后缀的UTC格式,而.NET 6默认仅输出时间字符串不带时区标识,导致客户端显示异常。要让.NET 6对齐旧版本行为,可通过自定义Json转换器实现。

全局配置方案(推荐)

在Program.cs中配置控制器的Json序列化选项,添加自定义转换器:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.Converters.Add(new UnspecifiedDateTimeToUtcConverter());
    });

// 自定义DateTime序列化转换器
public class UnspecifiedDateTimeToUtcConverter : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        // 反序列化保持默认逻辑,如需特殊处理可修改
        return DateTime.Parse(reader.GetString()!);
    }

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
    {
        if (value.Kind == DateTimeKind.Unspecified)
        {
            // 将未指定时区的DateTime按UTC格式输出,带Z后缀
            writer.WriteStringValue(value.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"));
        }
        else
        {
            // 其他时区类型保持默认序列化
            writer.WriteStringValue(value);
        }
    }
}

局部配置方案

如果仅需针对特定属性调整,可在属性上标注自定义转换器:

public class DateResponse
{
    [JsonConverter(typeof(UnspecifiedDateTimeToUtcConverter))]
    public DateTime MyDate { get; set; }
}

效果验证

配置完成后,你的示例接口返回结果将变为:

2023-09-26T12:28:20.793Z

与.NET Framework的输出完全一致,解决客户端显示问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:35:20