@@ -8,10 +8,12 @@ namespace Cysharp.Web;
8
8
9
9
public record WebSerializerOptions ( IWebSerializerProvider Provider )
10
10
{
11
+ static readonly UrlEncoder defaultEncoder = CreateDefaultEncoderWithEncodeSemicolonAndAtmark ( ) ;
12
+
11
13
public static WebSerializerOptions Default { get ; } = new WebSerializerOptions ( WebSerializerProvider . Default ) ;
12
14
13
15
public CultureInfo ? CultureInfo { get ; init ; }
14
- public UrlEncoder Encoder { get ; init ; } = CreateDefaultEncoderWithEncodeSemicolon ( ) ;
16
+ public UrlEncoder Encoder { get ; init ; } = defaultEncoder ;
15
17
public int MaxDepth { get ; init ; } = 64 ;
16
18
17
19
string ? separator = null ;
@@ -51,12 +53,21 @@ void Throw(Type type)
51
53
throw new InvalidOperationException ( $ "Type is not found in provider. Type:{ type } ") ;
52
54
}
53
55
54
- static UrlEncoder CreateDefaultEncoderWithEncodeSemicolon ( )
56
+ static UrlEncoder CreateDefaultEncoderWithEncodeSemicolonAndAtmark ( )
55
57
{
56
58
// UrlEncoder.Default is UnicodeRanges.BasicLastin(\u0000 -> \u007F)
57
59
// ; is U+003B so exclude in range
60
+ // @ is U+0040 so exclude in range
61
+
62
+ // 0 -> ';'
58
63
var first = UnicodeRange . Create ( '\u0000 ' , ( char ) ( ';' - 1 ) ) ;
59
- var second = UnicodeRange . Create ( ( char ) ( ';' + 1 ) , '\u007F ' ) ;
60
- return UrlEncoder . Create ( first , second ) ;
64
+
65
+ // ';' -> '@'
66
+ var second = UnicodeRange . Create ( ( char ) ( ';' + 1 ) , ( char ) ( '@' - 1 ) ) ;
67
+
68
+ // '@' -> 7F
69
+ var third = UnicodeRange . Create ( ( char ) ( '@' + 1 ) , '\u007F ' ) ;
70
+
71
+ return UrlEncoder . Create ( first , second , third ) ;
61
72
}
62
73
}
0 commit comments