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

如何在ASP.NET响应中保留DateTime的毫秒格式?

ASP.NET返回DateTime丢失毫秒的解决方法

一、使用System.Text.Json(默认序列化方式)

1. 全局配置(推荐)

在Program.cs(或Startup.cs)中配置Json序列化选项,强制DateTime输出包含毫秒的格式:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 为DateTime类型添加自定义转换器,指定带毫秒的格式
        options.JsonSerializerOptions.Converters.Add(new JsonConverter<DateTime>
        {
            Write = (writer, dateTime) =>
            {
                writer.WriteStringValue(dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff"));
            },
            Read = (reader) =>
            {
                return DateTime.Parse(reader.GetString()!);
            }
        });

        // 如需支持DateTimeOffset,添加对应转换器
        options.JsonSerializerOptions.Converters.Add(new JsonConverter<DateTimeOffset>
        {
            Write = (writer, dateTimeOffset) =>
            {
                writer.WriteStringValue(dateTimeOffset.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz"));
            },
            Read = (reader) =>
            {
                return DateTimeOffset.Parse(reader.GetString()!);
            }
        });
    });

2. 属性级别配置

如果仅需单个属性保留毫秒,可在Event类的HappenedAt属性上绑定自定义转换器:

public class Event
{
    public Event(DateTime happenedAt)
    {
        HappenedAt = happenedAt;
    }

    [JsonConverter(typeof(CustomDateTimeConverter))]
    public DateTime HappenedAt { get; }
}

// 自定义DateTime转换器
public class CustomDateTimeConverter : 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)
    {
        writer.WriteStringValue(value.ToString("yyyy-MM-ddTHH:mm:ss.fff"));
    }
}

二、使用Newtonsoft.Json(手动引入场景)

若项目用Newtonsoft.Json替代默认序列化,可通过以下方式配置:

1. 全局配置

在Program.cs(或Startup.cs)中统一设置日期格式:

builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        // 指定带毫秒的日期格式
        options.SerializerSettings.DateFormatString = "yyyy-MM-ddTHH:mm:ss.fff";
    });

2. 属性级别配置

在HappenedAt属性上直接指定格式:

public class Event
{
    public Event(DateTime happenedAt)
    {
        HappenedAt = happenedAt;
    }

    [JsonConverter(typeof(IsoDateTimeConverter), "yyyy-MM-ddTHH:mm:ss.fff")]
    public DateTime HappenedAt { get; }
}

额外注意

  • 先确认你的DateTime对象本身包含毫秒值:可通过dateTime.Millisecond属性验证,确保原始数据未丢失毫秒部分。
  • 若使用DateTimeOffset类型,默认序列化会保留毫秒,也可通过上述方法自定义输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:42:34