【问题标题】:JMS Serializer cannot serialize object to arrayJMS 序列化器无法将对象序列化为数组
【发布时间】:2016-05-26 08:59:33
【问题描述】:

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

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 或其他想法)以便获得预期的结果?

谢谢!

【问题讨论】:

    标签: php symfony jmsserializerbundle jms-serializer


    【解决方案1】:

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

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

    希望有帮助

    【讨论】:

    • 据我所见,addData() 采用 2 个参数并添加到 $visitor 中的关联数组中。我想单独返回 $things 数组,而不是包含在另一个数组中。无论哪种方式,我都试过了,它在寻找第二个参数时会引发错误。如果我在$this->things前面放一个key,序列化结果还是null
    • 嗨@tetele 你是对的,正确的签名是addData($key, $value) 你试过类似$visitor->addData('things', $this->things); 吗?否则你也可以试试$visitor->setRoot($this->things);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2016-10-08
    • 2022-07-05
    • 2016-01-28
    • 1970-01-01
    • 2017-05-26
    相关资源
    最近更新 更多