Skip to content

Commit a43a58c

Browse files
authored
Serialize sbyte as JSON number in transport and execution writers (#9846)
1 parent 30de1ac commit a43a58c

4 files changed

Lines changed: 59 additions & 0 deletions

File tree

src/HotChocolate/AspNetCore/src/Transport.Abstractions/Serialization/Utf8JsonWriterHelper.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,10 @@ internal static void WriteFieldValue(
337337
writer.WriteStringValue(s);
338338
break;
339339

340+
case sbyte sb:
341+
writer.WriteNumberValue(sb);
342+
break;
343+
340344
case byte b:
341345
writer.WriteNumberValue(b);
342346
break;

src/HotChocolate/AspNetCore/test/Transport.Http.Tests/OperationRequestTests.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,31 @@ public async Task Should_WriteNullValues()
3232
"""{"id":"abc","operationName":"myOperation","variables":{"abc":"def","hij":null}}""",
3333
result);
3434
}
35+
36+
[Fact]
37+
public async Task Should_WriteSByteVariableAsNumber()
38+
{
39+
// arrange
40+
var request = new OperationRequest(
41+
null,
42+
"abc",
43+
"myOperation",
44+
variables: new Dictionary<string, object?>
45+
{
46+
["value"] = (sbyte)2
47+
});
48+
49+
await using var memory = new MemoryStream();
50+
await using var writer = new Utf8JsonWriter(memory);
51+
52+
// act
53+
request.WriteTo(writer);
54+
await writer.FlushAsync();
55+
56+
// assert
57+
var result = Encoding.UTF8.GetString(memory.ToArray());
58+
Assert.Equal(
59+
"""{"id":"abc","operationName":"myOperation","variables":{"value":2}}""",
60+
result);
61+
}
3562
}

src/HotChocolate/Core/src/Execution.Abstractions/Execution/JsonValueFormatter.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ public static void WriteValue(
5353
writer.WriteStringValue(s);
5454
break;
5555

56+
case sbyte sb:
57+
writer.WriteNumberValue(sb);
58+
break;
59+
5660
case byte b:
5761
writer.WriteNumberValue(b);
5862
break;
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System.Buffers;
2+
using System.Text;
3+
using System.Text.Json;
4+
using HotChocolate.Text.Json;
5+
6+
namespace HotChocolate.Execution;
7+
8+
public class JsonValueFormatterTests
9+
{
10+
[Fact]
11+
public void WriteSByteAsNumber()
12+
{
13+
// arrange
14+
var buffer = new ArrayBufferWriter<byte>();
15+
var writer = new JsonWriter(buffer, new JsonWriterOptions { SkipValidation = true });
16+
17+
// act
18+
JsonValueFormatter.WriteValue(writer, (sbyte)2, new JsonSerializerOptions());
19+
20+
// assert
21+
var result = Encoding.UTF8.GetString(buffer.WrittenSpan);
22+
Assert.Equal("2", result);
23+
}
24+
}

0 commit comments

Comments
 (0)