From 89092ea27919cf2f74554e2bd19a12cb8bf37e79 Mon Sep 17 00:00:00 2001 From: JustDylan23 Date: Tue, 4 Jan 2022 22:23:09 +0100 Subject: [PATCH] [Serializer] Fix AbstractObjectNormalizer TypeError on denormalization --- .../Serializer/Normalizer/AbstractNormalizer.php | 2 +- .../Normalizer/AbstractObjectNormalizerTest.php | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php index b0a1f3218b830..7f86ed8d786e4 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php @@ -296,7 +296,7 @@ protected function isAllowedAttribute(object|string $classOrObject, string $attr * Normalizes the given data to an array. It's particularly useful during * the denormalization process. */ - protected function prepareForDenormalization(object|array|null $data): array + protected function prepareForDenormalization(mixed $data): array { return (array) $data; } diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php index b93671aaf9c44..03e5a889ff06d 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php @@ -14,6 +14,7 @@ use Doctrine\Common\Annotations\AnnotationReader; use PHPUnit\Framework\TestCase; use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor; +use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor; use Symfony\Component\PropertyInfo\Type; use Symfony\Component\Serializer\Exception\ExtraAttributesException; use Symfony\Component\Serializer\Exception\InvalidArgumentException; @@ -387,6 +388,17 @@ public function testNormalizeEmptyObject() $normalizedData = $normalizer->normalize(new EmptyDummy(), 'any', ['preserve_empty_objects' => true]); $this->assertEquals(new \ArrayObject(), $normalizedData); } + + public function testDenormalizeRecursiveWithObjectAttributeWithStringValue() + { + $extractor = new ReflectionExtractor(); + $normalizer = new ObjectNormalizer(null, null, null, $extractor); + $serializer = new Serializer([$normalizer]); + + $obj = $serializer->denormalize(['inner' => 'foo'], ObjectOuter::class); + + $this->assertInstanceOf(ObjectInner::class, $obj->getInner()); + } } class AbstractObjectNormalizerDummy extends AbstractObjectNormalizer