@@ -82,6 +82,22 @@ public static object Deserialize(Type type, ReadOnlySequence<byte> bytes, Messag
82
82
return GetOrAdd ( type ) . Deserialize_ReadOnlySequence_Options_CancellationToken . Invoke ( bytes , options , cancellationToken ) ;
83
83
}
84
84
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
+
85
101
private static async ValueTask < object > DeserializeObjectAsync < T > ( Stream stream , MessagePackSerializerOptions options , CancellationToken cancellationToken ) => await DeserializeAsync < T > ( stream , options , cancellationToken ) . ConfigureAwait ( false ) ;
86
102
87
103
private static CompiledMethods GetOrAdd ( Type type )
@@ -219,39 +235,22 @@ internal CompiledMethods(Type type)
219
235
}
220
236
221
237
{
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 ) } ) ;
224
240
#if ENABLE_IL2CPP
225
241
this . Serialize_MessagePackWriter_T_Options = ( ref MessagePackWriter x , object y , MessagePackSerializerOptions z ) => ThrowRefStructNotSupported ( ) ;
226
242
#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 ) ) ;
240
244
#endif
241
245
}
242
246
243
247
{
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 ) } ) ;
246
250
#if ENABLE_IL2CPP
247
251
this . Deserialize_MessagePackReader_Options = ( ref MessagePackReader reader , MessagePackSerializerOptions options ) => { ThrowRefStructNotSupported ( ) ; return null ; } ;
248
252
#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 ) ) ;
255
254
#endif
256
255
}
257
256
0 commit comments