2

我有一个仅用作数组容器的类。

class Container {
    private $things = array();

    public function addThing($thing) {
        $this->things[] = $thing;

        return $this;
    }

    public function getThings() {
        return $this->things;
    }
}

我会使用 JMS\Serializer 将此类序列化为仅包含它的数组。为此,我使用了一个特殊的处理函数:

use JMS\Serializer\Annotation\HandlerCallback;

class Container {
    // ...

    /**
     * @HandlerCallback("json", direction = "serialization")
     */
    public function serializeToJson() {
        return $this->things;
    }
}

现在如果我跑

$container = new Container();
$container->addThing('something'); // optional
print_r($serializer->serialize($container, 'json'));

我的期望是我得到

[
    'something'
]

但我得到的是null

我已经在这里报告了这个问题,但是有人知道这个问题的解决方法吗?我应该如何解决这个问题(不使用@HandlerCallback或其他想法),以便获得预期的结果?

谢谢!

4

1 回答 1

0

尝试使用作为方法参数传递的访问者对象,如下所示:

/** @HandlerCallback("json", direction = "serialization") */
public function serializeToJson(JsonSerializationVisitor $visitor)
{
    $visitor->addData($this->things);
}

希望这有帮助

于 2016-05-26T09:45:04.640 回答