You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 Web API中JSON无法转换为System.DateOnly的问题

.NET 8 Web API DateOnly JSON转换400错误解决办法

方法一:改用标准ISO 8601日期格式

默认情况下,.NET 8的System.Text.Json只识别两位数月份和日期的yyyy-MM-dd格式。你当前请求里的"2024-1-7"是单数位月日,不符合默认解析规则,改成"2024-01-07"就能正常解析:

{
    ...
    "createDate":"2024-01-07"
    ...
}

方法二:配置全局支持多日期格式

如果需要兼容单数位月日的格式,在Program.cs里配置Json序列化选项,添加自定义日期格式:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        var dateConverter = new DateOnlyConverter();
        dateConverter.SupportedFormats = new[] { "yyyy-MM-dd", "yyyy-M-d" };
        options.JsonSerializerOptions.Converters.Add(dateConverter);
    });

注:.NET 8自带DateOnlyConverter,无需手动实现基础转换器

方法三:自定义日期转换器(复杂场景)

如果需要支持更多特殊格式,比如MM/dd/yyyy,可以自己实现JsonConverter<DateOnly>:

public class CustomDateOnlyConverter : JsonConverter<DateOnly>
{
    private readonly string[] _formats = { "yyyy-MM-dd", "yyyy-M-d", "MM/dd/yyyy" };

    public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        if (DateOnly.TryParseExact(reader.GetString(), _formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out var date))
        {
            return date;
        }
        throw new JsonException("无法将值转换为DateOnly");
    }

    public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToString("yyyy-MM-dd"));
    }
}

然后在Program.cs注册转换器,或者直接给CreateDate属性加特性:

public class CreateItemRequest
{
    ...
    [JsonConverter(typeof(CustomDateOnlyConverter))]
    public DateOnly CreateDate { get; set; }
    ...
}

内容的提问来源于stack exchange,提问作者user3953989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 15:22:09