ISO UTC DateTime格式作为MVC 6 API响应中的默认json输出格式

时间:2017-01-18 20:19:54

标签: asp.net-core-mvc

有人知道如何在返回DateTime对象时将MVC6的json输出配置为默认为ISO UTC DateTime字符串格式吗?

在WebApi2中,我可以设置JsonFormatter SerializerSettings并转换日期时间,但我对MVC6中如何做到这一点有点困惑

2 个答案:

答案 0 :(得分:81)

我偶然发现了一些让我弄明白的东西。

以防万一有人想知道

在您的Startup.ConfigureServices

services.AddMvc().AddJsonOptions(options =>
                {
                    options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
                });

答案 1 :(得分:0)

如果您已迁移到ASP.NET Core 3.0,则该代码会自动更改。已发布不再起作用。为了让您免于头痛,这是您需要做的。首先创建一个自定义的DateTime JSON转换器:

public class DateTimeConverter : JsonConverter<DateTime> {
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
        return DateTime.Parse(reader.GetString());
    }

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) {
        string jsonDateTimeFormat = DateTime.SpecifyKind(value, DateTimeKind.Utc)
            .ToString("o", System.Globalization.CultureInfo.InvariantCulture);

        writer.WriteStringValue(jsonDateTimeFormat);
    }
}

然后按如下所示在您的Startup.cs中使用它:

services.AddControllersWithViews()
    .AddJsonOptions(options => {
        options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
    });

我希望这对某人有帮助。