C#类对象序列化为JSON时如何去除DateTime属性的时间部分
解决方法
根据使用场景选择对应配置即可,序列化后日期字段将仅输出yyyy-MM-dd格式的纯日期内容,无时间、时区后缀:
- 全局配置(所有日期字段统一生效)
序列化时传入自定义序列化规则,指定日期格式、关闭时区自动转换:
该配置下所有DateTime类型字段都会按纯日期格式输出,最终// Act var jsonSettings = new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd", DateTimeZoneHandling = DateTimeZoneHandling.Unspecified }; string output = JsonConvert.SerializeObject(driver, jsonSettings);DateOfBirth字段序列化结果为"DateOfBirth":"1959-12-11"。 - 单属性配置(仅指定字段生效)
如果仅需要DateOfBirth字段输出纯日期,其他日期字段保留原有序列化逻辑,直接在模型类的对应属性上添加格式转换特性即可,无需修改序列化调用代码:public class Driver { public Gender Gender { get; set; } [JsonConverter(typeof(Newtonsoft.Json.Converters.IsoDateTimeConverter), DateTimeFormat = "yyyy-MM-dd")] public DateTime DateOfBirth { get; set; } } - 注意事项
原输出带时区偏移是因为DateTime.Parse默认生成的是带本地时区标记的DateTime实例,配置DateTimeZoneHandling = DateTimeZoneHandling.Unspecified可以避免序列化时自动做时区转换,防止出现因时区差导致输出日期和赋值日期不一致的问题。
内容的提问来源于stack exchange,提问作者shreyas35
相关产品推荐
相关产品推荐

