ISO UTC DateTime format as default json output format in MVC 6 API response
And I just stumbled onto something that helped me figure it out.
Just in case anyone wants to know
In your Startup.ConfigureServices
services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
});
In case you've migrated to ASP.NET Core 3.0 the code that sf. has posted doesn't work anymore. To spare you some of my headache, here is what you need to do. First create a custom DateTime JSON converter:
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);
}
}
And then use it in your Startup.cs
as follows:
services.AddControllersWithViews()
.AddJsonOptions(options => {
options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
});
I hope this helps someone.