Abstract classes

JsonMapper can support abstract types but requires a factory to be registered which can map the data to the correct concrete implementation of the abstract class. During the building phase of the JsonMapper instance you can use the\JsonMapper\Handler\FactoryRegistry which is the second parameter ($nonInstantiableTypeResolver) to the \JsonMapper\Handler\PropertyMapper constructor.

Example

<?php
$nonInstantiableTypeResolver = new \JsonMapper\Handler\FactoryRegistry();
$nonInstantiableTypeResolver->addFactory(
    AbstractShape::class,
    new \JsonMapper\Tests\Implementation\Models\ShapeInstanceFactory()
);

$mapper = \JsonMapper\JsonMapperBuilder::new()
    ->withDocBlockAnnotationsMiddleware()
    ->withNamespaceResolverMiddleware()
    ->withPropertyMapper(new \JsonMapper\Handler\PropertyMapper(null, $nonInstantiableTypeResolver))
    ->build();

$object = \JsonMapper\Tests\Implementation\Models\Wrappers\AbstractShapeWrapper();
$mapper->mapObjectFromString('{"shape": {"type": "square", "width": 5, "length": 6}}', $object);

The classes referenced in the above example can be found as a working example in the integration test