使用System.Text.Json序列化时如何让单个DateTime属性仅输出日期格式
你可以通过自定义JsonConverter + 单个属性标注[JsonConverter]特性的方式实现需求,该方案仅作用于标注的属性,不会影响其他DateTime类型属性的序列化规则。
步骤1:实现仅序列化日期的自定义转换器
using System.Text.Json; using System.Text.Json.Serialization; public class DateOnlyJsonConverter : JsonConverter<DateTime> { public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return DateTime.Parse(reader.GetString() ?? string.Empty); } public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { // 按要求输出yyyy-MM-dd格式的日期字符串 writer.WriteStringValue(value.ToString("yyyy-MM-dd")); } }
如果需要支持可空DateTime类型,将继承的基类改为JsonConverter<DateTime?>,对应调整读写逻辑即可。
步骤2:给目标属性单独标注转换器特性
仅给需要输出日期格式的StartDate属性加转换器标注即可:
public class Dummy { [JsonPropertyName("startDate")] [JsonConverter(typeof(DateOnlyJsonConverter))] public DateTime StartDate { get; set; } [JsonPropertyName("actiondatetime")] public DateTime ActionDateTime { get; set; } }
运行效果
修改后执行序列化得到的结果如下,完全符合要求:
{"startDate":"2024-05-20","actiondatetime":"2024-05-20T15:22:30+08:00"}
内容的提问来源于stack exchange,提问作者Linda Lawton - DaImTo
相关产品推荐
相关产品推荐

