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/AbstractNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractNormalizerTest.php index 074e44e7adea8..5d7a42dba6b7a 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractNormalizerTest.php @@ -5,6 +5,7 @@ use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor; +use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor; use Symfony\Component\Serializer\Encoder\JsonEncoder; use Symfony\Component\Serializer\Mapping\AttributeMetadata; use Symfony\Component\Serializer\Mapping\ClassMetadata; @@ -217,4 +218,15 @@ public function testIgnore() $this->assertSame([], $normalizer->normalize($dummy)); } + + 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()); + } }