我有一个自定义处理程序来执行对象的反序列化:
public function deserialize( JsonDeserializationVisitor $visitor,
$data,
array $type,
DeserializationContext $context)
我不想自己完成所有的反序列化工作,我只想做一些。例如,我有一个专辑(id,名称,描述,照片),我想自己反序列化“描述”,并将所有其他工作留给包。
if (!empty($data['id']))
$album = $albumManager->createWithId($data['id']);
else
$album = $albumManager->create();
$album->setDescription($albumDescriptionParser->parse($data['description']));
// and now I want to delegate other deserialization job to JMSSerializer
// ....
return $album;
我知道这是使用上下文,访问者和导航器完成的,但我不知道如何
答案 0 :(得分:1)
好的,我找到了实现它的方法。似乎在反序列化处理程序中不容易处理。
相反,我使用了自定义ObjectConstructorInterface
接口实现和serializer.post_deserialize
事件。
可以在自定义ObjectConstructorInterface
实施中处理创建过程,并且可以在反序列化实际完成后设置所有“额外设置” - 当serializer.post_deserialize
事件发生时。