@@ -20,25 +20,24 @@ namespace Microsoft.AspNetCore.SignalR.Protocol
20
20
/// </summary>
21
21
public sealed class JsonHubProtocol : IHubProtocol
22
22
{
23
- // Use C#7.3's ReadOnlySpan<byte> optimization for static data https://vcsjones.com/2019/02/01/csharp-readonly-span-bytes-static/
24
23
private const string ResultPropertyName = "result" ;
25
- private static ReadOnlySpan < byte > ResultPropertyNameBytes => new byte [ ] { ( byte ) 'r' , ( byte ) 'e' , ( byte ) 's' , ( byte ) 'u' , ( byte ) 'l' , ( byte ) 't' } ;
24
+ private static JsonEncodedText ResultPropertyNameBytes = JsonEncodedText . Encode ( ResultPropertyName ) ;
26
25
private const string ItemPropertyName = "item" ;
27
- private static ReadOnlySpan < byte > ItemPropertyNameBytes => new byte [ ] { ( byte ) 'i' , ( byte ) 't' , ( byte ) 'e' , ( byte ) 'm' } ;
26
+ private static JsonEncodedText ItemPropertyNameBytes = JsonEncodedText . Encode ( ItemPropertyName ) ;
28
27
private const string InvocationIdPropertyName = "invocationId" ;
29
- private static ReadOnlySpan < byte > InvocationIdPropertyNameBytes => new byte [ ] { ( byte ) 'i' , ( byte ) 'n' , ( byte ) 'v' , ( byte ) 'o' , ( byte ) 'c' , ( byte ) 'a' , ( byte ) 't' , ( byte ) 'i' , ( byte ) 'o' , ( byte ) 'n' , ( byte ) 'I' , ( byte ) 'd' } ;
28
+ private static JsonEncodedText InvocationIdPropertyNameBytes = JsonEncodedText . Encode ( InvocationIdPropertyName ) ;
30
29
private const string StreamIdsPropertyName = "streamIds" ;
31
- private static ReadOnlySpan < byte > StreamIdsPropertyNameBytes => new byte [ ] { ( byte ) 's' , ( byte ) 't' , ( byte ) 'r' , ( byte ) 'e' , ( byte ) 'a' , ( byte ) 'm' , ( byte ) 'I' , ( byte ) 'd' , ( byte ) 's' } ;
30
+ private static JsonEncodedText StreamIdsPropertyNameBytes = JsonEncodedText . Encode ( StreamIdsPropertyName ) ;
32
31
private const string TypePropertyName = "type" ;
33
- private static ReadOnlySpan < byte > TypePropertyNameBytes => new byte [ ] { ( byte ) 't' , ( byte ) 'y' , ( byte ) 'p' , ( byte ) 'e' } ;
32
+ private static JsonEncodedText TypePropertyNameBytes = JsonEncodedText . Encode ( TypePropertyName ) ;
34
33
private const string ErrorPropertyName = "error" ;
35
- private static ReadOnlySpan < byte > ErrorPropertyNameBytes => new byte [ ] { ( byte ) 'e' , ( byte ) 'r' , ( byte ) 'r' , ( byte ) 'o' , ( byte ) 'r' } ;
34
+ private static JsonEncodedText ErrorPropertyNameBytes = JsonEncodedText . Encode ( ErrorPropertyName ) ;
36
35
private const string TargetPropertyName = "target" ;
37
- private static ReadOnlySpan < byte > TargetPropertyNameBytes => new byte [ ] { ( byte ) 't' , ( byte ) 'a' , ( byte ) 'r' , ( byte ) 'g' , ( byte ) 'e' , ( byte ) 't' } ;
36
+ private static JsonEncodedText TargetPropertyNameBytes = JsonEncodedText . Encode ( TargetPropertyName ) ;
38
37
private const string ArgumentsPropertyName = "arguments" ;
39
- private static ReadOnlySpan < byte > ArgumentsPropertyNameBytes => new byte [ ] { ( byte ) 'a' , ( byte ) 'r' , ( byte ) 'g' , ( byte ) 'u' , ( byte ) 'm' , ( byte ) 'e' , ( byte ) 'n' , ( byte ) 't' , ( byte ) 's' } ;
38
+ private static JsonEncodedText ArgumentsPropertyNameBytes = JsonEncodedText . Encode ( ArgumentsPropertyName ) ;
40
39
private const string HeadersPropertyName = "headers" ;
41
- private static ReadOnlySpan < byte > HeadersPropertyNameBytes => new byte [ ] { ( byte ) 'h' , ( byte ) 'e' , ( byte ) 'a' , ( byte ) 'd' , ( byte ) 'e' , ( byte ) 'r' , ( byte ) 's' } ;
40
+ private static JsonEncodedText HeadersPropertyNameBytes = JsonEncodedText . Encode ( HeadersPropertyName ) ;
42
41
43
42
private static readonly string ProtocolName = "json" ;
44
43
private static readonly int ProtocolVersion = 1 ;
@@ -144,7 +143,7 @@ private HubMessage ParseMessage(ReadOnlySequence<byte> input, IInvocationBinder
144
143
switch ( reader . TokenType )
145
144
{
146
145
case JsonTokenType . PropertyName :
147
- if ( reader . TextEquals ( TypePropertyNameBytes ) )
146
+ if ( reader . TextEquals ( TypePropertyNameBytes . EncodedUtf8Bytes ) )
148
147
{
149
148
type = reader . ReadAsInt32 ( TypePropertyName ) ;
150
149
@@ -153,11 +152,11 @@ private HubMessage ParseMessage(ReadOnlySequence<byte> input, IInvocationBinder
153
152
throw new InvalidDataException ( $ "Expected '{ TypePropertyName } ' to be of type { JsonTokenType . Number } .") ;
154
153
}
155
154
}
156
- else if ( reader . TextEquals ( InvocationIdPropertyNameBytes ) )
155
+ else if ( reader . TextEquals ( InvocationIdPropertyNameBytes . EncodedUtf8Bytes ) )
157
156
{
158
157
invocationId = reader . ReadAsString ( InvocationIdPropertyName ) ;
159
158
}
160
- else if ( reader . TextEquals ( StreamIdsPropertyNameBytes ) )
159
+ else if ( reader . TextEquals ( StreamIdsPropertyNameBytes . EncodedUtf8Bytes ) )
161
160
{
162
161
reader . CheckRead ( ) ;
163
162
@@ -177,15 +176,15 @@ private HubMessage ParseMessage(ReadOnlySequence<byte> input, IInvocationBinder
177
176
178
177
streamIds = newStreamIds . ToArray ( ) ;
179
178
}
180
- else if ( reader . TextEquals ( TargetPropertyNameBytes ) )
179
+ else if ( reader . TextEquals ( TargetPropertyNameBytes . EncodedUtf8Bytes ) )
181
180
{
182
181
target = reader . ReadAsString ( TargetPropertyName ) ;
183
182
}
184
- else if ( reader . TextEquals ( ErrorPropertyNameBytes ) )
183
+ else if ( reader . TextEquals ( ErrorPropertyNameBytes . EncodedUtf8Bytes ) )
185
184
{
186
185
error = reader . ReadAsString ( ErrorPropertyName ) ;
187
186
}
188
- else if ( reader . TextEquals ( ResultPropertyNameBytes ) )
187
+ else if ( reader . TextEquals ( ResultPropertyNameBytes . EncodedUtf8Bytes ) )
189
188
{
190
189
hasResult = true ;
191
190
@@ -204,7 +203,7 @@ private HubMessage ParseMessage(ReadOnlySequence<byte> input, IInvocationBinder
204
203
result = BindType ( token . RootElement , returnType ) ;
205
204
}
206
205
}
207
- else if ( reader . TextEquals ( ItemPropertyNameBytes ) )
206
+ else if ( reader . TextEquals ( ItemPropertyNameBytes . EncodedUtf8Bytes ) )
208
207
{
209
208
reader . CheckRead ( ) ;
210
209
@@ -233,7 +232,7 @@ private HubMessage ParseMessage(ReadOnlySequence<byte> input, IInvocationBinder
233
232
return new StreamBindingFailureMessage ( id , ExceptionDispatchInfo . Capture ( ex ) ) ;
234
233
}
235
234
}
236
- else if ( reader . TextEquals ( ArgumentsPropertyNameBytes ) )
235
+ else if ( reader . TextEquals ( ArgumentsPropertyNameBytes . EncodedUtf8Bytes ) )
237
236
{
238
237
reader . CheckRead ( ) ;
239
238
@@ -272,7 +271,7 @@ private HubMessage ParseMessage(ReadOnlySequence<byte> input, IInvocationBinder
272
271
}
273
272
}
274
273
}
275
- else if ( reader . TextEquals ( HeadersPropertyNameBytes ) )
274
+ else if ( reader . TextEquals ( HeadersPropertyNameBytes . EncodedUtf8Bytes ) )
276
275
{
277
276
reader . CheckRead ( ) ;
278
277
headers = ReadHeaders ( ref reader ) ;
@@ -516,7 +515,7 @@ private void WriteCompletionMessage(CompletionMessage message, Utf8JsonWriter wr
516
515
else if ( message . HasResult )
517
516
{
518
517
using var token = GetParsedObject ( message . Result , message . Result ? . GetType ( ) ) ;
519
- token . RootElement . WriteAsProperty ( ResultPropertyNameBytes , writer ) ;
518
+ token . RootElement . WriteAsProperty ( ResultPropertyNameBytes . EncodedUtf8Bytes , writer ) ;
520
519
}
521
520
}
522
521
@@ -530,7 +529,7 @@ private void WriteStreamItemMessage(StreamItemMessage message, Utf8JsonWriter wr
530
529
WriteInvocationId ( message , writer ) ;
531
530
532
531
using var token = GetParsedObject ( message . Item , message . Item ? . GetType ( ) ) ;
533
- token . RootElement . WriteAsProperty ( ItemPropertyNameBytes , writer ) ;
532
+ token . RootElement . WriteAsProperty ( ItemPropertyNameBytes . EncodedUtf8Bytes , writer ) ;
534
533
}
535
534
536
535
private void WriteInvocationMessage ( InvocationMessage message , Utf8JsonWriter writer )
0 commit comments