From fcf94fbdb7281c38ee48ae96492f685ceea000e3 Mon Sep 17 00:00:00 2001 From: Florian Bernd Date: Thu, 16 Oct 2025 10:08:50 +0200 Subject: [PATCH] Fix floating point serialization for NETFRAMEWORK builds --- .../_Shared/Next/DoubleWithFractionalPortionConverter.cs | 8 ++++++++ .../_Shared/Next/SingleWithFractionalPortionConverter.cs | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/Elastic.Clients.Elasticsearch/_Shared/Next/DoubleWithFractionalPortionConverter.cs b/src/Elastic.Clients.Elasticsearch/_Shared/Next/DoubleWithFractionalPortionConverter.cs index dc5e553ff94..cc58e2cde99 100644 --- a/src/Elastic.Clients.Elasticsearch/_Shared/Next/DoubleWithFractionalPortionConverter.cs +++ b/src/Elastic.Clients.Elasticsearch/_Shared/Next/DoubleWithFractionalPortionConverter.cs @@ -17,7 +17,15 @@ internal sealed class DoubleWithFractionalPortionConverter : // https://github.com/dotnet/runtime/blob/main/src/libraries/System.Text.Json/src/System/Text/Json/JsonConstants.cs#L78 public const int MaximumFormatLength = 128 + 2; +#if !NETFRAMEWORK + // Use G17 to ensure round-tripping of double values. + // See here: https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings#the-g-format-specifier private static readonly StandardFormat DefaultFormat = StandardFormat.Parse("G17"); +#else + // .NET Framework does not support a custom precision specifier with the G format. + private static readonly StandardFormat DefaultFormat = StandardFormat.Parse("G"); +#endif + private static readonly JsonEncodedText NaN = JsonEncodedText.Encode("NaN"u8); private static readonly JsonEncodedText PositiveInfinity = JsonEncodedText.Encode("Infinity"u8); private static readonly JsonEncodedText NegativeInfinity = JsonEncodedText.Encode("-Infinity"u8); diff --git a/src/Elastic.Clients.Elasticsearch/_Shared/Next/SingleWithFractionalPortionConverter.cs b/src/Elastic.Clients.Elasticsearch/_Shared/Next/SingleWithFractionalPortionConverter.cs index 2c0e0d225f7..a43138d9ab7 100644 --- a/src/Elastic.Clients.Elasticsearch/_Shared/Next/SingleWithFractionalPortionConverter.cs +++ b/src/Elastic.Clients.Elasticsearch/_Shared/Next/SingleWithFractionalPortionConverter.cs @@ -17,7 +17,15 @@ internal sealed class SingleWithFractionalPortionConverter : // https://github.com/dotnet/runtime/blob/main/src/libraries/System.Text.Json/src/System/Text/Json/JsonConstants.cs#L79 public const int MaximumFormatLength = 128 + 2; +#if !NETFRAMEWORK + // Use G9 to ensure round-tripping of float values. + // See here: https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings#the-g-format-specifier private static readonly StandardFormat DefaultFormat = StandardFormat.Parse("G9"); +#else + // .NET Framework does not support a custom precision specifier with the G format. + private static readonly StandardFormat DefaultFormat = StandardFormat.Parse("G"); +#endif + private static readonly JsonEncodedText NaN = JsonEncodedText.Encode("NaN"u8); private static readonly JsonEncodedText PositiveInfinity = JsonEncodedText.Encode("Infinity"u8); private static readonly JsonEncodedText NegativeInfinity = JsonEncodedText.Encode("-Infinity"u8);