1. 程式人生 > 其它 >引數型別與引數不匹配(datetime)

引數型別與引數不匹配(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   不過一般專案框架中都會安裝這個