1

我有一个执行对象反序列化的自定义处理程序:

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;

我知道这是使用上下文、访问者和导航器完成的,但我不知道如何

4

1 回答 1

1

好的,我找到了实现它的方法。在反序列化处理程序中似乎不容易处理。

相反,我使用了我的自定义ObjectConstructorInterface接口实现和serializer.post_deserialize事件。

创建过程可以在自定义ObjectConstructorInterface实现中处理,并且可以在实际完成反序列化后设置所有“额外设置” - 当serializer.post_deserialize事件发生时。

于 2014-01-02T14:16:39.883 回答