首页 > 解决方案 > System.Text.Json ASP.NET Core 3.1 的特定日期时间格式

问题描述

我有一个带格式的日期时间输入,dd/MM/yyyy但是当我调试到控制器时日期时间是错误的

在此处输入图像描述

在此处输入图像描述

我已经尝试过像这样制作自定义转换器:

public class DateTimeConverter : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        if (reader.TokenType == JsonTokenType.String)
        {
            var s = reader.GetString();
            if (DateTime.TryParseExact(s, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dt))
            {
                return dt;
            }
        }

        return reader.GetDateTime();
    }

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value);
    }
}

public class DateTimeNullableConverter : JsonConverter<DateTime?>
{
    public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        var s = reader.GetString();
        if (DateTime.TryParseExact(s, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dt))
        {
            return dt;
        }
        return null;
    }

    public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options)
    {
        if (value != null)
        {
            writer.WriteStringValue(value.Value);
        }
        else
        {
            writer.WriteStringValue(string.Empty);
        }
    }
}

并注册它Startup.cs喜欢这个

services.AddControllersWithViews()
    .AddRazorRuntimeCompilation()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
        options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
        options.JsonSerializerOptions.Converters.Add(new DateTimeNullableConverter());
        options.JsonSerializerOptions.PropertyNamingPolicy = null;
    });

仍然没有结果。

但是,如果我将计算机日期格式更改dd/MM/yyyy为代码就可以了 在此处输入图像描述

有什么问题吗?提前致谢

标签: asp.net-core-3.1system.text.json

解决方案


推荐阅读