【问题标题】:How to serialize object that is not a personal model with JMS Serializer?如何使用 JMS 序列化器序列化不是个人模型的对象?
【发布时间】:2017-05-12 21:21:07
【问题描述】:

我在 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)被序列化为{}

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

【问题讨论】:

    标签: symfony serialization jmsserializerbundle jms-serializer


    【解决方案1】:

    如果您使用注释,则 JMS 序列化程序对每个类都有排除策略,您可以看到 here

    我建议改为默认排除所有并仅在要公开的属性上添加序列化程序组注释。您可以添加多个组,因此在这种情况下,您的序列化程序上下文可以具有组“form”和“translationBasic”,然后将“form”组添加到 formView 上的所有属性,并将“translationBasic”添加到您想要的 Translation 类.

    【讨论】:

    • 但是我需要覆盖供应商的 FormView 类。这听起来不是最佳实践
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2014-11-04
    • 2022-11-10
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多