/**
  * @return object
  */
 public function denormalize(NormalizationResult $wrappedNormalizationResult, AggregateRepository $aggregateRepository)
 {
     $wrappedMetadata = $wrappedNormalizationResult->metadata();
     $normalizer = $this->getNormalizer($wrappedMetadata['aggregateClass']);
     $unwrappedNormalizationResult = new NormalizationResult($wrappedNormalizationResult->normalizedAggregate(), $wrappedMetadata['metadata']);
     $aggregate = $normalizer->denormalize($unwrappedNormalizationResult, $aggregateRepository);
     return $aggregate;
 }
 public function denormalize(NormalizationResult $normalizationResult, AggregateRepository $aggregateRepository)
 {
     $normalizedAggregate = $normalizationResult->normalizedAggregate();
     $scope = (object) ['objects' => [], 'aggregateRepository' => $aggregateRepository];
     foreach ($normalizedAggregate['#objects'] as $objectId => $normalizedObject) {
         $className = $normalizedObject['#class'];
         $scope->objects[$objectId] = self::getClassReflection($className)->newInstanceWithoutConstructor();
     }
     $aggregateClassName = $normalizedAggregate['#class'];
     $aggregate = self::getClassReflection($aggregateClassName)->newInstanceWithoutConstructor();
     foreach ($scope->objects as $objectId => $object) {
         $normalizedObject = $normalizedAggregate['#objects'][$objectId];
         $this->hydrateObject($normalizedObject, $object, $scope);
     }
     $this->hydrateObject($normalizedAggregate, $aggregate, $scope);
     return $aggregate;
 }