diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php index 38b349841355..46b03d7183ab 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php @@ -262,7 +262,7 @@ protected function getAttributes($object, string $format = null, array $context) array_unshift($attributes, $mapping->getTypeProperty()); } - if ($context['cache_key']) { + if ($context['cache_key'] && \stdClass::class !== $class) { $this->attributesCache[$key] = $attributes; } diff --git a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php index e881a49d8b8a..c3ab890951b3 100644 --- a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php @@ -62,6 +62,10 @@ public function hasCacheableSupportsMethod(): bool */ protected function extractAttributes(object $object, string $format = null, array $context = []) { + if (\stdClass::class === \get_class($object)) { + return array_keys((array) $object); + } + // If not using groups, detect manually $attributes = []; diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php index aca0ded3ab4e..3e210285bea1 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -696,6 +696,20 @@ public function testObjectClassResolver() $normalizer->normalize($obj, 'any') ); } + + public function testNormalizeStdClass() + { + $o1 = new \stdClass(); + $o1->foo = 'f'; + $o1->bar = 'b'; + + $this->assertSame(['foo' => 'f', 'bar' => 'b'], $this->normalizer->normalize($o1)); + + $o2 = new \stdClass(); + $o2->baz = 'baz'; + + $this->assertSame(['baz' => 'baz'], $this->normalizer->normalize($o2)); + } } class ProxyObjectDummy extends ObjectDummy