Da auch .net core 3.0 immer noch nicht korrekt mit TimeSpan klarkommt, habe ich mir einen Converter selbst geschrieben:
public class TimeSpanConverter : JsonConverter<TimeSpan> {
public override TimeSpan Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
return TimeSpan.Parse(reader.GetString());
}
public override void Write(Utf8JsonWriter writer, TimeSpan value, JsonSerializerOptions options) {
writer.WriteStringValue(value.ToString(@"hh\:mm"));
}
}
Das mit der Annotation hab ich nicht hinbekommen, aber man kann diesen für alle TimeSpans in der startup.cs registrieren:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews().AddJsonOptions(options => {
options.JsonSerializerOptions.Converters.Add(new TimeSpanConverter());
});
}
Mehr muss nicht getan werden!