public function visitObject(ClassMetadata $metadata, $data, Type $type, Context $context, ObjectConstructorInterface $objectConstructor = null)
 {
     $object = $objectConstructor->construct($this, $metadata, $data, $type, $context);
     /** @var PropertyMetadata $propertyMetadata */
     foreach ($context->getNonSkippedProperties($metadata) as $propertyMetadata) {
         $context->getMetadataStack()->push($propertyMetadata);
         $v = $this->visitProperty($propertyMetadata, $data, $context);
         $context->getMetadataStack()->pop();
         $propertyMetadata->setValue($object, $v);
     }
     $this->setData($object);
     return $object;
 }
 /**
  * {@inheritdoc}
  */
 public function construct(VisitorInterface $visitor, ClassMetadata $metadata, $data, Type $type, DeserializationContext $context)
 {
     $object = $this->loadFromObjectManager($metadata, $data);
     return $object ?: $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context);
 }