public function visitObject(ClassMetadata $metadata, $data, Type $type, Context $context, ObjectConstructorInterface $objectConstructor = null)
 {
     $properties = $context->getNonSkippedProperties($metadata);
     $this->validateObjectProperties($metadata, $properties);
     if ($this->nodeStack->count() === 1 && $this->document->documentElement === null) {
         $this->createRootNode($metadata);
     }
     $nodes = [];
     foreach ($metadata->xmlNamespaces as $prefix => $uri) {
         $this->xmlNamespaces[$prefix] = $uri;
     }
     /** @var PropertyMetadata $propertyMetadata */
     foreach ($properties as $propertyMetadata) {
         $context->getMetadataStack()->push($propertyMetadata);
         $this->visitProperty($propertyMetadata, $data, $context);
         $context->getMetadataStack()->pop();
         $currentNode = $this->currentNodes;
         if (null === $currentNode) {
             continue;
         } elseif (is_array($currentNode)) {
             $nodes = array_merge($nodes, $currentNode);
         } else {
             $nodes[] = $currentNode;
         }
     }
     return $this->currentNodes = $nodes;
 }
 public function visitObject(ClassMetadata $metadata, $data, Type $type, Context $context, ObjectConstructorInterface $objectConstructor = null)
 {
     $this->data = [];
     /** @var PropertyMetadata $propertyMetadata */
     foreach ($context->getNonSkippedProperties($metadata) as $propertyMetadata) {
         $context->getMetadataStack()->push($propertyMetadata);
         $this->visitProperty($propertyMetadata, $data, $context);
         $context->getMetadataStack()->pop();
     }
     return $this->data;
 }