From d7bca800079fa24297d2623188ebea44216fcd6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Wed, 5 Feb 2020 01:25:55 +0100 Subject: [PATCH] [Serializer] Add support for stdClass --- .../Normalizer/AbstractObjectNormalizer.php | 2 +- .../Serializer/Normalizer/ObjectNormalizer.php | 4 ++++ .../Tests/Normalizer/ObjectNormalizerTest.php | 14 ++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php index 38b3498413..46b03d7183 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php @@ -262,7 +262,7 @@ abstract class AbstractObjectNormalizer extends AbstractNormalizer 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 e881a49d8b..c3ab890951 100644 --- a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php @@ -62,6 +62,10 @@ class ObjectNormalizer extends AbstractObjectNormalizer */ 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 aca0ded3ab..3e210285be 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -696,6 +696,20 @@ class ObjectNormalizerTest extends TestCase $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