(Symfony + JMS Serializer)
我有以下服务:
my_serializer:
class: MySerializer
tags:
- { name: jms_serializer.handler, type: MyClass, direction: serialization, format: json, method: serializeMyClassToJson }
服务类只包含一个方法:
public function serializeMyClassToJson(
JsonSerializationVisitor $visitor,
MyClass $myObject,
array $type,
Context $context
) {
return array(
'id' => $myObject->getId()
// .. and so on
);
}
当我的处理程序启用时,我在这个类的任何对象上调用serialize()
时得到一个NULL结果(即在JMS Serializer中注册 - 如果我删除它,一切正常):
$this->container->get('jms_serializer')->serialize($myObject, 'json'); // null
需要注意的一些事项:
我的序列化方法被调用,我确信我从中返回了正确的数组(显然,我测试了几个虚拟数组 - 但结果是一样的。)
奇怪的是,当MyClass
是另一个Doctrine托管实体的一部分并且我序列化该实体时,序列化有效(MySecondClass
与OneToOne
有MyClass
的关系):
[...]->serialize($mySecondObject, 'json'); // includes the correct JSON result for $myObject
[...]->serialize($mySecondObject->getMyObject(), 'json'); // null
我没有为MyClass中的属性定义任何注释。
那么,我可能错过了我的处理程序的一些注释或回调?
答案 0 :(得分:2)
解决方法(虽然不是我的问题的答案)似乎是对我的处理程序回调的以下调整:
public function serializeMyClassToJson(
JsonSerializationVisitor $visitor,
MyClass $myObject,
array $type,
Context $context
) {
$result = array(
'id' => $myObject->getId()
// .. and so on
);
// Populate the root element if it's NULL
// (with this change, the JSON output seems to be correct)
if ($visitor->getRoot() === null) {
$visitor->setRoot($result);
}
return $result;
}