From a2380398a2bc6805060bc55378e482e9e374be71 Mon Sep 17 00:00:00 2001 From: denglihong2007 <98096191+denglihong2007@users.noreply.github.com> Date: Sat, 20 Dec 2025 23:49:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=97=A9=E7=82=B9=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E4=BF=9D=E5=AD=98=20[skip=20cliff]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CRSim.Core/Converters/TimeSpanJsonConverter.cs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/CRSim.Core/Converters/TimeSpanJsonConverter.cs b/CRSim.Core/Converters/TimeSpanJsonConverter.cs index 1353b60..9c61035 100644 --- a/CRSim.Core/Converters/TimeSpanJsonConverter.cs +++ b/CRSim.Core/Converters/TimeSpanJsonConverter.cs @@ -13,19 +13,29 @@ namespace CRSim.Core.Converters if (reader.TokenType == JsonTokenType.String) { string timeString = reader.GetString(); - if (TimeSpan.TryParseExact(timeString, TimeFormat, null, System.Globalization.TimeSpanStyles.None, out TimeSpan result)) + if (string.IsNullOrEmpty(timeString)) return null; + bool isNegative = timeString.StartsWith('-'); + string absoluteValue = isNegative ? timeString[1..] : timeString; + if (TimeSpan.TryParseExact(absoluteValue, TimeFormat, null, out TimeSpan result)) { - return result; + return isNegative ? -result : result; } } - return null; // 处理 null 值 + return null; } public override void Write(Utf8JsonWriter writer, TimeSpan? value, JsonSerializerOptions options) { if (value.HasValue) { - writer.WriteStringValue(value.Value.ToString(TimeFormat)); + if (value.Value < TimeSpan.Zero) + { + writer.WriteStringValue("-" + value.Value.Duration().ToString(TimeFormat)); + } + else + { + writer.WriteStringValue(value.Value.ToString(TimeFormat)); + } } else {