@@ -32,11 +32,20 @@ public sealed class JsonQueryResultSerializer : IQueryResultSerializer
32
32
/// </param>
33
33
public JsonQueryResultSerializer ( bool indented = false , JavaScriptEncoder ? encoder = null )
34
34
{
35
- _options = new JsonWriterOptions { Indented = indented , Encoder = encoder } ;
35
+ _options = new JsonWriterOptions
36
+ {
37
+ Indented = indented ,
38
+ Encoder = encoder ?? JavaScriptEncoder . UnsafeRelaxedJsonEscaping ,
39
+ } ;
36
40
}
37
41
38
42
public unsafe string Serialize ( IQueryResult result )
39
43
{
44
+ if ( result is null )
45
+ {
46
+ throw new ArgumentNullException ( nameof ( result ) ) ;
47
+ }
48
+
40
49
using var buffer = new ArrayWriter ( ) ;
41
50
42
51
Serialize ( result , buffer ) ;
@@ -49,14 +58,29 @@ public unsafe string Serialize(IQueryResult result)
49
58
50
59
/// <inheritdoc />
51
60
public void Serialize ( IQueryResult result , IBufferWriter < byte > writer )
61
+ {
62
+ if ( result is null )
63
+ {
64
+ throw new ArgumentNullException ( nameof ( result ) ) ;
65
+ }
66
+
67
+ if ( writer is null )
68
+ {
69
+ throw new ArgumentNullException ( nameof ( writer ) ) ;
70
+ }
71
+
72
+ SerializeInternal ( result , writer ) ;
73
+ }
74
+
75
+ private void SerializeInternal ( IQueryResult result , IBufferWriter < byte > writer )
52
76
{
53
77
using var jsonWriter = new Utf8JsonWriter ( writer , _options ) ;
54
78
WriteResult ( jsonWriter , result ) ;
55
79
jsonWriter . Flush ( ) ;
56
80
}
57
81
58
82
/// <inheritdoc />
59
- public async Task SerializeAsync (
83
+ public Task SerializeAsync (
60
84
IQueryResult result ,
61
85
Stream stream ,
62
86
CancellationToken cancellationToken = default )
@@ -71,11 +95,32 @@ public async Task SerializeAsync(
71
95
throw new ArgumentNullException ( nameof ( stream ) ) ;
72
96
}
73
97
74
- await using var writer = new Utf8JsonWriter ( stream , _options ) ;
98
+ return SerializeInternalAsync ( result , stream , cancellationToken ) ;
99
+ }
100
+
101
+ private async Task SerializeInternalAsync (
102
+ IQueryResult result ,
103
+ Stream outputStream ,
104
+ CancellationToken cancellationToken = default )
105
+ {
106
+ await using var writer = new Utf8JsonWriter ( outputStream , _options ) ;
75
107
76
108
WriteResult ( writer , result ) ;
109
+ using var buffer = new ArrayWriter ( ) ;
110
+ SerializeInternal ( result , buffer ) ;
111
+
112
+ #if NETSTANDARD2_0
113
+ await outputStream
114
+ . WriteAsync ( buffer . GetInternalBuffer ( ) , 0 , buffer . Length , cancellationToken )
115
+ . ConfigureAwait ( false ) ;
116
+ #else
117
+ await outputStream
118
+ . WriteAsync ( buffer . Body , cancellationToken )
119
+ . ConfigureAwait ( false ) ;
120
+ #endif
77
121
78
122
await writer . FlushAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
123
+ await outputStream . FlushAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
79
124
}
80
125
81
126
private void WriteResult ( Utf8JsonWriter writer , IQueryResult result )
0 commit comments