有人知道如何在返回DateTime对象时将MVC6的json输出配置为默认为ISO UTC DateTime字符串格式吗?
在WebApi2中,我可以设置JsonFormatter SerializerSettings并转换日期时间,但我对MVC6中如何做到这一点有点困惑
答案 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());
});
我希望这对某人有帮助。