How to deep populate, eg turn JSON into entity?

I have the following (extremly simplified) example entity:

class Reseller {
    private ?Uuid $id;
    private string $name;
    private ContactInfo $contactInfo;
}
class ContactInfo {
    private string $defaultEmail;
}

I have JSON, I want to serialize into an existing $reseller:

{"name":"Changed name","contactInfo":{"defaultEmail":"[email protected]"}}

The documentation tells this:

When the AbstractObjectNormalizer::DEEP_OBJECT_TO_POPULATE option is set to true, existing children of the root OBJECT_TO_POPULATE are updated from the normalized data, instead of the denormalizer re-creating them. Note that DEEP_OBJECT_TO_POPULATE only works for single child objects, but not for arrays of objects. Those will still be replaced when present in the normalized data.

So I’ve made this my serializer:

return $serializer->deserialize(
    $data, // this is the JSON
    Reseller::class,
    'json',
    [
        AbstractObjectNormalizer::DEEP_OBJECT_TO_POPULATE => true,
        AbstractNormalizer::OBJECT_TO_POPULATE => $reseller,
        AbstractNormalizer::GROUPS => $groups,
    ]
);

However, this leads to a

AppEntityReseller::setContactInfo(): Argument #1 ($contactInfo) must be of type AppEntityContactInfo, array given, called in […]vendor/symfony/property-access/PropertyAccessor.php on line 509

What am I missing here? I’ve tried various locations and combinations to no avail. And Googling this just give endless examples how to serialize simple objects, without children.
The rest of my serializer config is pretty much the documentations version + a circular-reference-handler