@@ -82,6 +82,22 @@ public static object Deserialize(Type type, ReadOnlySequence<byte> bytes, Messag
8282 return GetOrAdd ( type ) . Deserialize_ReadOnlySequence_Options_CancellationToken . Invoke ( bytes , options , cancellationToken ) ;
8383 }
8484
85+ /// <summary>
86+ /// Helper method used by reflection.
87+ /// </summary>
88+ private static void SerializeSemiGeneric < T > ( ref MessagePackWriter writer , object valueObject , MessagePackSerializerOptions options = null )
89+ {
90+ Serialize ( ref writer , ( T ) valueObject , options ) ;
91+ }
92+
93+ /// <summary>
94+ /// Helper method used by reflection.
95+ /// </summary>
96+ private static object DeserializeSemiGeneric < T > ( ref MessagePackReader reader , MessagePackSerializerOptions options = null )
97+ {
98+ return Deserialize < T > ( ref reader , options ) ;
99+ }
100+
85101 private static async ValueTask < object > DeserializeObjectAsync < T > ( Stream stream , MessagePackSerializerOptions options , CancellationToken cancellationToken ) => await DeserializeAsync < T > ( stream , options , cancellationToken ) . ConfigureAwait ( false ) ;
86102
87103 private static CompiledMethods GetOrAdd ( Type type )
@@ -219,39 +235,22 @@ internal CompiledMethods(Type type)
219235 }
220236
221237 {
222- // public static void Serialize <T>(ref MessagePackWriter writer, T obj, MessagePackSerializerOptions options)
223- MethodInfo serialize = GetMethod ( nameof ( Serialize ) , type , new Type [ ] { typeof ( MessagePackWriter ) . MakeByRefType ( ) , null , typeof ( MessagePackSerializerOptions ) } ) ;
238+ // private static void SerializeSemiGeneric <T>(ref MessagePackWriter writer, object obj, MessagePackSerializerOptions options)
239+ MethodInfo serialize = GetMethod ( nameof ( SerializeSemiGeneric ) , type , new Type [ ] { typeof ( MessagePackWriter ) . MakeByRefType ( ) , typeof ( object ) , typeof ( MessagePackSerializerOptions ) } ) ;
224240#if ENABLE_IL2CPP
225241 this . Serialize_MessagePackWriter_T_Options = ( ref MessagePackWriter x , object y , MessagePackSerializerOptions z ) => ThrowRefStructNotSupported ( ) ;
226242#else
227- ParameterExpression param1 = Expression . Parameter ( typeof ( MessagePackWriter ) . MakeByRefType ( ) , "writer" ) ;
228- ParameterExpression param2 = Expression . Parameter ( typeof ( object ) , "obj" ) ;
229- ParameterExpression param3 = Expression . Parameter ( typeof ( MessagePackSerializerOptions ) , "options" ) ;
230-
231- MethodCallExpression body = Expression . Call (
232- null ,
233- serialize ,
234- param1 ,
235- ti . IsValueType ? Expression . Unbox ( param2 , type ) : Expression . Convert ( param2 , type ) ,
236- param3 ) ;
237- MessagePackWriterSerialize lambda = Expression . Lambda < MessagePackWriterSerialize > ( body , param1 , param2 , param3 ) . Compile ( PreferInterpretation ) ;
238-
239- this . Serialize_MessagePackWriter_T_Options = lambda ;
243+ this . Serialize_MessagePackWriter_T_Options = ( MessagePackWriterSerialize ) serialize . CreateDelegate ( typeof ( MessagePackWriterSerialize ) ) ;
240244#endif
241245 }
242246
243247 {
244- // public static T Deserialize <T>(ref MessagePackReader reader, MessagePackSerializerOptions options)
245- MethodInfo deserialize = GetMethod ( nameof ( Deserialize ) , type , new Type [ ] { typeof ( MessagePackReader ) . MakeByRefType ( ) , typeof ( MessagePackSerializerOptions ) } ) ;
248+ // private static object DeserializeSemiGeneric <T>(ref MessagePackReader reader, MessagePackSerializerOptions options)
249+ MethodInfo deserialize = GetMethod ( nameof ( DeserializeSemiGeneric ) , type , new Type [ ] { typeof ( MessagePackReader ) . MakeByRefType ( ) , typeof ( MessagePackSerializerOptions ) } ) ;
246250#if ENABLE_IL2CPP
247251 this . Deserialize_MessagePackReader_Options = ( ref MessagePackReader reader , MessagePackSerializerOptions options ) => { ThrowRefStructNotSupported ( ) ; return null ; } ;
248252#else
249- ParameterExpression param1 = Expression . Parameter ( typeof ( MessagePackReader ) . MakeByRefType ( ) , "reader" ) ;
250- ParameterExpression param2 = Expression . Parameter ( typeof ( MessagePackSerializerOptions ) , "options" ) ;
251- UnaryExpression body = Expression . Convert ( Expression . Call ( null , deserialize , param1 , param2 ) , typeof ( object ) ) ;
252- MessagePackReaderDeserialize lambda = Expression . Lambda < MessagePackReaderDeserialize > ( body , param1 , param2 ) . Compile ( ) ;
253-
254- this . Deserialize_MessagePackReader_Options = lambda ;
253+ this . Deserialize_MessagePackReader_Options = ( MessagePackReaderDeserialize ) deserialize . CreateDelegate ( typeof ( MessagePackReaderDeserialize ) ) ;
255254#endif
256255 }
257256
0 commit comments