.NET 设置 DTO 和 EF 的默认日期时间格式

问题描述 投票:0回答:1

我有一个带有 DateTime 属性的 DTO。当我使用 Swagger 将数据发送到端点时,它需要特定格式的日期时间。

public class TimeStampDTO
{
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd HH:mm:ss}", ApplyFormatInEditMode = true)]
    [DataType(DataType.DateTime)]
    public DateTime Timestamp { get; set; }
}

当我检查 swagger 时,它需要一个与 DTO 中指定的格式不同的日期时间。

{
  "timestamp": "2024-09-27T09:31:42.291Z"
}

预期结果:

{
  "timestamp": "2024-09-27 09:31:42"
}

我现在无法接近端点,因为我无法序列化时间戳。我该如何解决这个问题?

c# .net
1个回答
0
投票

有两种方法可以做到这一点:

使用Newtonsoft.Json: 安装包:

dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson

在 Startup.cs(或 .NET 5+ 的 Program.cs)中,配置 JSON 序列化器:

services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
    });

或者 使用 System.Text.Json:

在 Startup.cs(或 .NET 5+ 的 Program.cs)中:

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
    });

创建自定义日期时间转换器:

public class DateTimeConverter : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) =>
        DateTime.ParseExact(reader.GetString(), "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) =>
        writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss"));
}

这将确保 Swagger 和您的 API 都使用所需的日期时间格式。

© www.soinside.com 2019 - 2024. All rights reserved.