引數型別與引數不匹配(datetime)
引數:
{
dt:"2022-03-02 03:16:26"
}
接收:DateTime
message:"引數與引數型別不匹配"
有兩種
第一種:
第一步:自定義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());
})
第二種比較簡單
services.AddControllersWithViews()
.AddNewtonsoftJson(options=> {
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); //序列化時key為駝峰樣式 options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;//忽略迴圈引用 });
不過要安裝類庫 install-package Microsoft.AspNetCore.Mvc.NewtonsoftJson 不過一般專案框架中都會安裝這個