diff --git a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php index 6c9098528b..77c98377ee 100644 --- a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php @@ -142,11 +142,16 @@ class ObjectNormalizer extends AbstractObjectNormalizer return false; } - if (null !== $this->classDiscriminatorResolver && null !== $discriminatorMapping = $this->classDiscriminatorResolver->getMappingForMappedObject($classOrObject)) { - $allowedAttributes[] = $attributesAsString ? $discriminatorMapping->getTypeProperty() : new AttributeMetadata($discriminatorMapping->getTypeProperty()); + if (null !== $this->classDiscriminatorResolver) { + $class = \is_object($classOrObject) ? \get_class($classOrObject) : $classOrObject; + if (null !== $discriminatorMapping = $this->classDiscriminatorResolver->getMappingForMappedObject($classOrObject)) { + $allowedAttributes[] = $attributesAsString ? $discriminatorMapping->getTypeProperty() : new AttributeMetadata($discriminatorMapping->getTypeProperty()); + } - foreach ($discriminatorMapping->getTypesMapping() as $class) { - $allowedAttributes = array_merge($allowedAttributes, parent::getAllowedAttributes($class, $context, $attributesAsString)); + if (null !== $discriminatorMapping = $this->classDiscriminatorResolver->getMappingForClass($class)) { + foreach ($discriminatorMapping->getTypesMapping() as $mappedClass) { + $allowedAttributes = array_merge($allowedAttributes, parent::getAllowedAttributes($mappedClass, $context, $attributesAsString)); + } } } diff --git a/src/Symfony/Component/Serializer/Tests/Fixtures/DummyMessageNumberTwo.php b/src/Symfony/Component/Serializer/Tests/Fixtures/DummyMessageNumberTwo.php index 060c10dd79..3b828e50bf 100644 --- a/src/Symfony/Component/Serializer/Tests/Fixtures/DummyMessageNumberTwo.php +++ b/src/Symfony/Component/Serializer/Tests/Fixtures/DummyMessageNumberTwo.php @@ -11,9 +11,15 @@ namespace Symfony\Component\Serializer\Tests\Fixtures; +use Symfony\Component\Serializer\Annotation\Groups; + /** * @author Samuel Roze */ class DummyMessageNumberTwo implements DummyMessageInterface { + /** + * @Groups({"two"}) + */ + public $three; }