private function serializeWithCustomSerializer(Clazz $customSerializer, $instance, Clazz $instanceClass, Clazz $manuallySerializedType)
 {
     assert(!$instanceClass->isArray());
     foreach ($customSerializer->getMethods() as $method) {
         if ($method->getName() === 'serialize') {
             assert($method->isStatic());
             $toReturn = new InvokeCustomFieldSerializerCommand($instanceClass, $customSerializer, $manuallySerializedType);
             $this->identityMap->put($instance, $toReturn);
             $subWriter = new CommandServerSerializationStreamWriter(new HasValuesCommandSink($toReturn), $this->clientOracle, $this->identityMap);
             $method->invoke($subWriter, $instance);
             return $toReturn;
         }
     }
     throw new NoSuchMethodException('Could not find serialize method in custom serializer ' . $customSerializer->getName());
 }
 private function deserializeWithCustomFieldDeserializer(Clazz $customSerializer, Clazz $instanceClass, $instance)
 {
     assert(!$instanceClass->isArray());
     foreach ($customSerializer->getMethods() as $method) {
         if ($method->getName() === 'deserialize') {
             $method->invoke($this, $instance);
             return;
         }
     }
     throw new NoSuchMethodException('deserialize');
 }