JMS Serializer无法将对象序列化为数组

时间:2016-05-26 08:59:33

标签: php symfony jmsserializerbundle jms-serializer

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

希望这个帮助