public static TypeInfo Build(DynamicFormatterAssembly assembly, ObjectSerializationInfo serializationInfo) { Type type = serializationInfo.Type; TypeBuilder typeBuilder = assembly.DefineFormatterType(type); serializationInfo.SerializeMemberInfosOrderByKeyIndex(type); MethodBuilder serializeMethod = TypeBuildHelper.DefineSerializeMethod(typeBuilder, type); MethodBuilder deserializeMethod = TypeBuildHelper.DefineDeserializeMethod(typeBuilder, type); MethodBuilder sizeMethod = TypeBuildHelper.DefineSizeMethod(typeBuilder, type); Type delegateCacheType = typeof(Array3DelegateCache <>).MakeGenericType(type); delegateCacheType.GetMethod(nameof(Array3DelegateCache <int> .Factory), BindingFlags.NonPublic | BindingFlags.Static).Invoke(null, new object[] { assembly, serializationInfo }); TypeBuildHelper.CallSerializeDelegate(serializeMethod, type, delegateCacheType.GetField(nameof(Array3DelegateCache <int> .Serialize))); TypeBuildHelper.CallSizeDelegate(sizeMethod, type, delegateCacheType.GetField(nameof(Array3DelegateCache <int> .Size))); TypeBuildHelper.CallDeserializeDelegate(deserializeMethod, type, delegateCacheType.GetField(nameof(Array3DelegateCache <int> .Deserialize))); return(typeBuilder.CreateTypeInfo()); }