如何使JSON中DateTime字段以00:00:00格式传输?
如何让C#实体类的DateTime字段在JSON中以"HH:mm:ss"格式传输
根据你提供的实体类和Swagger示例,以下是两种主流JSON序列化库的解决方案:
一、使用System.Text.Json(.NET Core/.NET 5+ 默认)
1. 单个字段单独配置
先定义一个自定义的JSON转换器:
public class TimeFormatConverter : JsonConverter<DateTime> { // 按需调整格式,需要日期的话用"yyyy-MM-dd HH:mm:ss" private const string _targetFormat = "HH:mm:ss"; public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return DateTime.ParseExact(reader.GetString(), _targetFormat, CultureInfo.InvariantCulture); } public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString(_targetFormat, CultureInfo.InvariantCulture)); } }
然后在实体类的DateTime字段上添加特性:
public string CompanyName { get; set; } public bool IsVerified { get; set; } = false; [JsonConverter(typeof(TimeFormatConverter))] public DateTime permissionStartDate { get; set; } [JsonConverter(typeof(TimeFormatConverter))] public DateTime permissionEndDate { get; set; }
2. 全局配置(所有DateTime字段生效)
在Program.cs(.NET 6+)或Startup.cs中配置全局序列化选项:
// .NET 6+ Program.cs示例 builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new TimeFormatConverter()); });
二、使用Newtonsoft.Json(Json.NET)
1. 单个字段单独配置
直接利用库内置的转换器指定格式:
public string CompanyName { get; set; } public bool IsVerified { get; set; } = false; // 需要日期的话把格式改成"yyyy-MM-dd HH:mm:ss" [JsonConverter(typeof(DateFormatConverter), "HH:mm:ss")] public DateTime permissionStartDate { get; set; } [JsonConverter(typeof(DateFormatConverter), "HH:mm:ss")] public DateTime permissionEndDate { get; set; }
2. 全局配置
在Startup.cs中设置全局日期格式:
services.AddMvc() .AddNewtonsoftJson(options => { // 按需调整格式字符串 options.SerializerSettings.DateFormatString = "HH:mm:ss"; });
注意事项
- 如果需要传输包含日期的完整格式(如
"2023-01-05 00:00:00"),只需将格式字符串替换为"yyyy-MM-dd HH:mm:ss" - 单个字段的配置优先级高于全局配置
- 反序列化时需确保前端传入的时间格式与转换器指定的格式一致,否则会抛出解析异常
内容的提问来源于stack exchange,提问作者Chiwen
相关产品推荐
相关产品推荐

