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

sf.*_*sf. 25 asp.net-core-mvc

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

在WebApi2中,我可以设置JsonFormatter SerializerSettings并转换日期时间但是我有点担心如何在MVC6中执行此操作

sf.*_*sf. 85

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

以防万一有人想知道

在您的Startup.ConfigureServices中

services.AddMvc().AddJsonOptions(options =>
                {
                    options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
                });
Run Code Online (Sandbox Code Playgroud)

  • 这似乎应该更好地记录下来,如果我没有看到这个答案,就会被困住几个小时 (10认同)
  • 它移至“NewtonsoftJson”。因此,不要使用“AddJsonOptions”,而是使用“AddNewtonSoftJson” (2认同)

Dim*_*rov 15

如果您已迁移到 ASP.NET Core 3.0,则 sf. 已发布不再有效。为了让您免于我的一些头痛,这是您需要做的。首先创建一个自定义的 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您Startup.cs的如下使用它:

services.AddControllersWithViews()
    .AddJsonOptions(options => {
        options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
    });
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助别人。