diff --git a/src/lib/Output/Generator/Data/ArrayList.php b/src/lib/Output/Generator/Data/ArrayList.php index 5daf9788..d92ec548 100644 --- a/src/lib/Output/Generator/Data/ArrayList.php +++ b/src/lib/Output/Generator/Data/ArrayList.php @@ -15,7 +15,7 @@ final class ArrayList extends \ArrayObject public function __construct( string $name, - ?object $parent = null + object $parent ) { $this->name = $name; $this->parent = $parent; @@ -29,4 +29,14 @@ public function getParent(): object { return $this->parent; } + + public function getName(): string + { + return $this->name; + } + + public function setName(string $name): void + { + $this->name = $name; + } } diff --git a/src/lib/Output/Generator/Json.php b/src/lib/Output/Generator/Json.php index 411fa946..42064756 100644 --- a/src/lib/Output/Generator/Json.php +++ b/src/lib/Output/Generator/Json.php @@ -145,6 +145,9 @@ public function startObjectElement($name, $mediaTypeName = null) if ($this->json instanceof Json\ArrayObject || $this->json instanceof Data\ArrayList) { $this->json->append($object); + if ($this->json instanceof Data\ArrayList) { + $this->json->setName($name); + } $this->json = $object; } else { $this->json->$name = $object; diff --git a/src/lib/Output/Normalizer/JsonObjectNormalizer.php b/src/lib/Output/Normalizer/JsonObjectNormalizer.php index f76fbb04..22d7472d 100644 --- a/src/lib/Output/Normalizer/JsonObjectNormalizer.php +++ b/src/lib/Output/Normalizer/JsonObjectNormalizer.php @@ -7,6 +7,7 @@ namespace Ibexa\Rest\Output\Normalizer; +use Ibexa\Rest\Output\Generator\Data\ArrayList; use Ibexa\Rest\Output\Generator\Json\JsonObject; use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface; use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait; @@ -25,8 +26,14 @@ public function normalize($object, ?string $format = null, array $context = []): { $vars = get_object_vars($object); - foreach ($vars as $name => $value) { - $vars[$name] = $this->normalizer->normalize($value, $format, $context); + foreach ($vars as $key => $value) { + if ($value instanceof ArrayList) { + $name = $value->getName(); + unset($vars[$key]); + $vars[$name] = $this->normalizer->normalize($value, $format, $context); + } else { + $vars[$key] = $this->normalizer->normalize($value, $format, $context); + } } return $vars;