.net core 通过Json传datetime类型参数的问题[转发]
现象:
在.netcore 3.1 webapi中,使用json格式传入datetime类型参数时,会报解析失败异常,或者时间少8个小时,返回datetime类型值时返回的是utc时间;
解决方法:
第一步:自定义DateTime解析类
public class DateTimeConverter : JsonConverter<DateTime> { public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return DateTime.TryParse(reader.GetString(), out var dateTime) ? dateTime : default(DateTime); } public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss")); } }
DateTime?类型解析类
public class DateTimeNullableConvert : JsonConverter<DateTime?> { public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return DateTime.TryParse(reader.GetString(), out var dateTime) ? dateTime : default(DateTime?); } public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options) { writer.WriteStringValue(value?.ToString("yyyy-MM-dd HH:mm:ss")); } }
第二步:在startup中加入此两个类:
services.AddControllers().AddJsonOptions(config => { //此设定解决JsonResult中文被编码的问题 config.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); config.JsonSerializerOptions.Converters.Add(new DateTimeConverter()); config.JsonSerializerOptions.Converters.Add(new DateTimeNullableConvert()); })
版权声明:本文为CSDN博主「csdmwinter」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/csdmwinter/article/details/106564464