【发布时间】:2021-12-28 21:58:11
【问题描述】:
当没有时间部分时,我想将DateTime 的输出格式化为yyyy-MM-dd i.s.o。 yyyy-MM-ddT00:00:00 在我的情况下默认。
控制器 API 是:
[HttpGet("date")]
public async Task<DateTime> GetDateAsync(Date)
{
// dummy code
return DateTime.Now.Date;
}
在 Swagger 中,输出被视为yyyy-MM-ddT00:00:00
我想这是由于
internal const string DefaultDateFormatString = @"yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK"; in Newtonsoft.Json.JsonSerializerSettings
但我希望它像 yyyy-MM-dd 那样没有时间部分:
if (value is DateTime d)
{
if (d.TotalSeconds == 0)
{
writer.WriteValue(d.ToString("yyyy-MM-dd"));
}
}
所以我想知道如何在上述条件下自定义序列化,然后在启动时进行配置。
这仅适用于控制器的数据输出。
我正在使用ASP.NET 3.1 并使用Newtonsoft.Json
谢谢
【问题讨论】:
-
如果您使用的是 .NET 6,请使用
DateOnly而不是DateTime -
您使用的是什么版本的 asp.net core?什么是序列化程序(newtonsoft 或 system.text.json)?
-
如果您需要帮助,您必须发布整个操作
-
试试 writer.WriteValue(d.Date.ToString("o"));它将产生 yyyy-MM-ddT00:00:00
-
我尝试使用 DateOnly,但它没有被序列化为我想要的 2021-12-29 之类的字符串。它提供结构的 JSON 表示。我是否需要在启动时连接一个序列化器,它将所有 DateOnly 类型从任何控制器转换为上述字符串格式? @大卫G