unsafe private static void WriteNumber64(StringBuilder stringBuilder, Number64 value) { const int MaxNumberLength = 32; Span <byte> buffer = stackalloc byte[MaxNumberLength]; if (value.IsInteger) { if (!Utf8Formatter.TryFormat( value: Number64.ToLong(value), destination: buffer, bytesWritten: out int bytesWritten)) { throw new InvalidOperationException($"Failed to write a long."); } buffer = buffer.Slice(start: 0, length: bytesWritten); for (int i = 0; i < buffer.Length; i++) { stringBuilder.Append((char)buffer[i]); } } else { // Until we move to Core 3.0 we have to call ToString(), // since neither G with precision nor R are supported for Utf8Formatter. stringBuilder.Append(value.ToString("R", CultureInfo.InvariantCulture)); } }