如何使用JMS Serializer序列化非个人模型的对象?

时间:2016-12-28 15:04:41

标签: symfony serialization jmsserializerbundle jms-serializer

我在Symfony2项目中使用FOSrestBundle。我有一个像这样的视图:

$view = $this
    ->view(array(
        'form' => $this->formHandler->getForm()->createView(),
        'translation' => $translation,
    ), Response::HTTP_OK)
    ->setTemplate('MyBundle:Translation.html.twig');

$translation是我自己的捆绑包的对象。问题是当我调用$this->handleView($view)时,FosRestBundle使用JMS序列化程序来序列化我的视图数据(表单和翻译对象),但我的翻译对象有很多属性在我的情况下无用且响应很远对我想做的事情来说太大了。

我决定使用组注释来仅检索有用的属性。

以下是view群组的背景信息:

$context = SerializationContext::create()->setGroups(array('view'));
$view->setSerializationContext($context);

在我的翻译模型中,我可以将ExclusionPolicy设置为all,并将有用的属性添加到view组。它正在运行但是使用此配置(序列化上下文中的组view),我的表单对象(Symfony\Component\Form\FormView)被序列化为{}

如何为翻译模型使用组,但仍然序列化我的FormView对象?

1 个答案:

答案 0 :(得分:0)

如果您正在使用注释,则JMS序列化程序会为每个类提供排除策略,您可以看到here

我建议默认排除all并仅在要公开的属性上添加序列化程序组注释。您可以添加多个组,因此在这种情况下,您的序列化程序上下文可以包含组" form"和" translationBasic",然后添加"表格"分享到formView和" translationBasic"上的所有属性只为那些你想要的翻译课。