@@ -16,7 +16,8 @@ public class SystemTextJsonIpcObjectSerializer : IIpcObjectSerializer
1616{
1717 internal SystemTextJsonIpcObjectSerializer ( )
1818 {
19- JsonSerializerContext = IpcInternalJsonSerializerContext . Default ;
19+ // 完全走反射的方式
20+ //JsonSerializerContext = IpcInternalJsonSerializerContext.Default;
2021 }
2122
2223 /// <summary>
@@ -31,7 +32,7 @@ public SystemTextJsonIpcObjectSerializer(JsonSerializerContext jsonSerializerCon
3132 /// <summary>
3233 /// 获取 JSON 序列化上下文。
3334 /// </summary>
34- public JsonSerializerContext JsonSerializerContext { get ; }
35+ public JsonSerializerContext ? JsonSerializerContext { get ; }
3536
3637 /// <inheritdoc />
3738 public byte [ ] Serialize ( object ? value )
@@ -41,7 +42,16 @@ public byte[] Serialize(object? value)
4142 return "{}"u8 . ToArray ( ) ;
4243 }
4344
44- var json = JsonSerializer . Serialize ( value , value . GetType ( ) , JsonSerializerContext ) ;
45+ string json ;
46+ if ( JsonSerializerContext is null )
47+ {
48+ json = JsonSerializer . Serialize ( value ) ;
49+ }
50+ else
51+ {
52+ json = JsonSerializer . Serialize ( value , value . GetType ( ) , JsonSerializerContext ) ;
53+ }
54+
4555 return Encoding . UTF8 . GetBytes ( json ) ;
4656 }
4757
@@ -54,7 +64,14 @@ public void Serialize(Stream stream, object? value)
5464 return ;
5565 }
5666
57- JsonSerializer . Serialize ( stream , value , value . GetType ( ) , JsonSerializerContext ) ;
67+ if ( JsonSerializerContext is null )
68+ {
69+ JsonSerializer . Serialize ( stream , value ) ;
70+ }
71+ else
72+ {
73+ JsonSerializer . Serialize ( stream , value , value . GetType ( ) , JsonSerializerContext ) ;
74+ }
5875 }
5976
6077 /// <inheritdoc />
@@ -65,20 +82,45 @@ public IpcJsonElement SerializeToElement(object? value)
6582 return default ;
6683 }
6784
68- return new IpcJsonElement { RawValueOnSystemTextJson = JsonSerializer . SerializeToElement ( value , value . GetType ( ) , JsonSerializerContext ) , } ;
85+ JsonElement jsonElement ;
86+ if ( JsonSerializerContext is null )
87+ {
88+ jsonElement = JsonSerializer . SerializeToElement ( value ) ;
89+ }
90+ else
91+ {
92+ jsonElement = JsonSerializer . SerializeToElement ( value , value . GetType ( ) , JsonSerializerContext ) ;
93+ }
94+
95+ return new IpcJsonElement { RawValueOnSystemTextJson = jsonElement , } ;
6996 }
7097
7198 /// <inheritdoc />
7299 public T ? Deserialize < T > ( byte [ ] data , int start , int length )
73100 {
74101 var span = data . AsSpan ( start , length ) ;
75- return JsonSerializer . Deserialize < T > ( span , ( JsonTypeInfo < T > ) JsonSerializerContext . GetTypeInfo ( typeof ( T ) ) ! ) ;
102+
103+ if ( JsonSerializerContext is null )
104+ {
105+ return JsonSerializer . Deserialize < T > ( span ) ;
106+ }
107+ else
108+ {
109+ return JsonSerializer . Deserialize < T > ( span , ( JsonTypeInfo < T > ) JsonSerializerContext . GetTypeInfo ( typeof ( T ) ) ! ) ;
110+ }
76111 }
77112
78113 /// <inheritdoc />
79114 public T ? Deserialize < T > ( Stream stream )
80115 {
81- return JsonSerializer . Deserialize < T > ( stream , ( JsonTypeInfo < T > ) JsonSerializerContext . GetTypeInfo ( typeof ( T ) ) ! ) ;
116+ if ( JsonSerializerContext is null )
117+ {
118+ return JsonSerializer . Deserialize < T > ( stream ) ;
119+ }
120+ else
121+ {
122+ return JsonSerializer . Deserialize < T > ( stream , ( JsonTypeInfo < T > ) JsonSerializerContext . GetTypeInfo ( typeof ( T ) ) ! ) ;
123+ }
82124 }
83125
84126 /// <inheritdoc />
@@ -88,7 +130,15 @@ public IpcJsonElement SerializeToElement(object? value)
88130 {
89131 return default ;
90132 }
91- return element . Deserialize < T > ( ( JsonTypeInfo < T > ) JsonSerializerContext . GetTypeInfo ( typeof ( T ) ) ! ) ;
133+
134+ if ( JsonSerializerContext is null )
135+ {
136+ return element . Deserialize < T > ( ) ;
137+ }
138+ else
139+ {
140+ return element . Deserialize < T > ( ( JsonTypeInfo < T > ) JsonSerializerContext . GetTypeInfo ( typeof ( T ) ) ! ) ;
141+ }
92142 }
93143}
94144
0 commit comments