@@ -44,13 +44,14 @@ abstract class AbstractObjectNormalizer extends AbstractNormalizer
4444 * @var callable|null
4545 */
4646 private $ maxDepthHandler ;
47+ private $ objectClassResolver ;
4748
4849 /**
4950 * @var ClassDiscriminatorResolverInterface|null
5051 */
5152 protected $ classDiscriminatorResolver ;
5253
53- public function __construct (ClassMetadataFactoryInterface $ classMetadataFactory = null , NameConverterInterface $ nameConverter = null , PropertyTypeExtractorInterface $ propertyTypeExtractor = null , ClassDiscriminatorResolverInterface $ classDiscriminatorResolver = null )
54+ public function __construct (ClassMetadataFactoryInterface $ classMetadataFactory = null , NameConverterInterface $ nameConverter = null , PropertyTypeExtractorInterface $ propertyTypeExtractor = null , ClassDiscriminatorResolverInterface $ classDiscriminatorResolver = null , callable $ objectClassResolver = null )
5455 {
5556 parent ::__construct ($ classMetadataFactory , $ nameConverter );
5657
@@ -60,6 +61,7 @@ public function __construct(ClassMetadataFactoryInterface $classMetadataFactory
6061 $ classDiscriminatorResolver = new ClassDiscriminatorFromClassMetadata ($ classMetadataFactory );
6162 }
6263 $ this ->classDiscriminatorResolver = $ classDiscriminatorResolver ;
64+ $ this ->objectClassResolver = $ objectClassResolver ;
6365 }
6466
6567 /**
@@ -86,7 +88,7 @@ public function normalize($object, $format = null, array $context = array())
8688 $ data = array ();
8789 $ stack = array ();
8890 $ attributes = $ this ->getAttributes ($ object , $ format , $ context );
89- $ class = \get_class ($ object );
91+ $ class = $ this -> objectClassResolver ? \call_user_func ( $ this -> objectClassResolver , $ object ) : \get_class ($ object );
9092 $ attributesMetadata = $ this ->classMetadataFactory ? $ this ->classMetadataFactory ->getMetadataFor ($ class )->getAttributesMetadata () : null ;
9193
9294 foreach ($ attributes as $ attribute ) {
@@ -155,7 +157,7 @@ protected function instantiateObject(array &$data, $class, array &$context, \Ref
155157 */
156158 protected function getAttributes ($ object , $ format = null , array $ context )
157159 {
158- $ class = \get_class ($ object );
160+ $ class = $ this -> objectClassResolver ? \call_user_func ( $ this -> objectClassResolver , $ object ) : \get_class ($ object );
159161 $ key = $ class .'- ' .$ context ['cache_key ' ];
160162
161163 if (isset ($ this ->attributesCache [$ key ])) {
0 commit comments