From 67e777851656936af46515dea575178415bbd393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Thu, 12 Jun 2025 00:41:00 +0800 Subject: [PATCH] fix: require system.text.json 8.0 for compatibility issur --- .../Cnblogs.DashScope.Core.csproj | 1 + .../DashScopeClientCore.cs | 2 +- .../Internals/JsonSeparatorNamingPolicy.cs | 128 ------------------ .../JsonSnakeCaseLowerNamingPolicy.cs | 11 -- 4 files changed, 2 insertions(+), 140 deletions(-) delete mode 100644 src/Cnblogs.DashScope.Core/Internals/JsonSeparatorNamingPolicy.cs delete mode 100644 src/Cnblogs.DashScope.Core/Internals/JsonSnakeCaseLowerNamingPolicy.cs diff --git a/src/Cnblogs.DashScope.Core/Cnblogs.DashScope.Core.csproj b/src/Cnblogs.DashScope.Core/Cnblogs.DashScope.Core.csproj index 7d46d37..b164ed0 100644 --- a/src/Cnblogs.DashScope.Core/Cnblogs.DashScope.Core.csproj +++ b/src/Cnblogs.DashScope.Core/Cnblogs.DashScope.Core.csproj @@ -13,6 +13,7 @@ + diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientCore.cs b/src/Cnblogs.DashScope.Core/DashScopeClientCore.cs index fdbed71..e0f3159 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClientCore.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClientCore.cs @@ -18,7 +18,7 @@ public class DashScopeClientCore : IDashScopeClient new() { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, - PropertyNamingPolicy = JsonSnakeCaseLowerNamingPolicy.SnakeCaseLower, + PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower }; private readonly HttpClient _httpClient; diff --git a/src/Cnblogs.DashScope.Core/Internals/JsonSeparatorNamingPolicy.cs b/src/Cnblogs.DashScope.Core/Internals/JsonSeparatorNamingPolicy.cs deleted file mode 100644 index 761ae20..0000000 --- a/src/Cnblogs.DashScope.Core/Internals/JsonSeparatorNamingPolicy.cs +++ /dev/null @@ -1,128 +0,0 @@ -using System.Buffers; -using System.Globalization; -using System.Runtime.CompilerServices; -using System.Text.Json; - -namespace Cnblogs.DashScope.Core.Internals; - -// back-porting from dotnet/runtime -internal abstract class JsonSeparatorNamingPolicy : JsonNamingPolicy -{ - private readonly bool _lowercase; - private readonly char _separator; - - internal JsonSeparatorNamingPolicy(bool lowercase, char separator) - { - _lowercase = lowercase; - _separator = separator; - } - - public sealed override string ConvertName(string? name) - { - if (name == null) - { - throw new ArgumentNullException(nameof(name)); - } - - return ConvertNameCore(_separator, _lowercase, name.AsSpan()); - } - - private static string ConvertNameCore(char separator, bool lowercase, ReadOnlySpan chars) - { - var rentedBuffer = (char[]?)null; - var minimumLength = (int)(1.2 * chars.Length); - var destination = minimumLength > 128 /*0x80*/ - ? (Span)(rentedBuffer = ArrayPool.Shared.Rent(minimumLength)) - : stackalloc char[128 /*0x80*/]; - var separatorState = SeparatorState.NotStarted; - var charsWritten = 0; - for (var index = 0; index < chars.Length; ++index) - { - var c = chars[index]; - var unicodeCategory = char.GetUnicodeCategory(c); - switch (unicodeCategory) - { - case UnicodeCategory.UppercaseLetter: - switch (separatorState) - { - case SeparatorState.UppercaseLetter: - if (index + 1 < chars.Length && char.IsLower(chars[index + 1])) - { - WriteChar(separator, ref destination); - } - - break; - case SeparatorState.LowercaseLetterOrDigit: - case SeparatorState.SpaceSeparator: - WriteChar(separator, ref destination); - break; - } - - if (lowercase) - c = char.ToLowerInvariant(c); - WriteChar(c, ref destination); - separatorState = SeparatorState.UppercaseLetter; - break; - case UnicodeCategory.LowercaseLetter: - case UnicodeCategory.DecimalDigitNumber: - if (separatorState == SeparatorState.SpaceSeparator) - WriteChar(separator, ref destination); - if (!lowercase && unicodeCategory == UnicodeCategory.LowercaseLetter) - c = char.ToUpperInvariant(c); - WriteChar(c, ref destination); - separatorState = SeparatorState.LowercaseLetterOrDigit; - break; - case UnicodeCategory.SpaceSeparator: - if (separatorState != SeparatorState.NotStarted) - { - separatorState = SeparatorState.SpaceSeparator; - } - - break; - default: - WriteChar(c, ref destination); - separatorState = SeparatorState.NotStarted; - break; - } - } - - var str = destination.Slice(0, charsWritten).ToString(); - if (rentedBuffer != null) - { - destination.Slice(0, charsWritten).Clear(); - ArrayPool.Shared.Return(rentedBuffer); - } - - return str; - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - void WriteChar(char value, ref Span destination) - { - if (charsWritten == destination.Length) - ExpandBuffer(ref destination); - destination[charsWritten++] = value; - } - - void ExpandBuffer(ref Span destination) - { - var destination1 = ArrayPool.Shared.Rent(checked(destination.Length * 2)); - destination.CopyTo((Span)destination1); - if (rentedBuffer != null) - { - destination.Slice(0, charsWritten).Clear(); - ArrayPool.Shared.Return(rentedBuffer); - } - - rentedBuffer = destination1; - destination = (Span)rentedBuffer; - } - } - - private enum SeparatorState - { - NotStarted, - UppercaseLetter, - LowercaseLetterOrDigit, - SpaceSeparator, - } -} diff --git a/src/Cnblogs.DashScope.Core/Internals/JsonSnakeCaseLowerNamingPolicy.cs b/src/Cnblogs.DashScope.Core/Internals/JsonSnakeCaseLowerNamingPolicy.cs deleted file mode 100644 index 23d1f48..0000000 --- a/src/Cnblogs.DashScope.Core/Internals/JsonSnakeCaseLowerNamingPolicy.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Cnblogs.DashScope.Core.Internals; - -internal class JsonSnakeCaseLowerNamingPolicy : JsonSeparatorNamingPolicy -{ - public static readonly JsonSnakeCaseLowerNamingPolicy SnakeCaseLower = new(); - - private JsonSnakeCaseLowerNamingPolicy() - : base(true, '_') - { - } -}