【问题标题】:JMS Serializer unable to handle serialization loopJMS 序列化器无法处理序列化循环
【发布时间】:2015-08-24 19:21:14
【问题描述】:

昨晚,我的网络应用程序因返回给用户的白屏而死机。很快就找到了根本情况:PHP 内存不足。

追查问题后,得出JMS Serializer处理序列化循环失败的结论。

我有 ProductGroup 类,其中有 Product 个对象(列表)。现在,每个Product 都指代它所属的一个组。因此,当用户尝试序列化 ProductGroup 时,它会执行此操作,然后在跳回 ProductGroup(刚刚序列化)时继续序列化每个 Product,从而有效地创建序列化循环。

我设法解决了这个问题,但将@Exclude 放在Product::group 属性上。

所以,问题是:在序列化方面我还有其他选择吗?有没有可能JMS Serializer 无法找出循环?

【问题讨论】:

    标签: php symfony jmsserializerbundle jms-serializer


    【解决方案1】:

    您可以尝试在 ProductGroup->products 和 Product->group 上设置 MaxDepth 以确保它不会进入循环。此外,对组 + 产品和产品 + 组使用不同序列化组的方法可以缓解这种情况,并确保在获取单个产品时仍然可以拥有关联的组。

    关于您的第二个问题,在 Doctrine 中甚至不鼓励双向引用,因此 JMS\Serializer 抛出某种异常而不是尝试“修复”它似乎是预期的行为。

    【讨论】:

    • 我明白了。好吧,MaxDepth 最接近我能问的了,我猜 :) 谢谢!至于关系,确实是单反OneToMany。如果我有两个独立但有效的引用来回移动,我认为这将是一个大问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多