JMS序列化器无法处理序列化循环



昨晚,我的web应用程序死机了,给用户返回白屏。没有花很长时间就找到了根本原因:PHP内存不足。

跟踪问题后,我得出结论,JMS Serializer未能处理序列化循环。

我有类ProductGroup,它有Product对象的数量(列表)。现在,每个Product都指向它所属的一个组。因此,当用户尝试序列化ProductGroup时,它会这样做,然后在跳转到ProductGroup(刚刚序列化过)时继续序列化每个Product,从而有效地创建了一个序列化循环。

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

所以,问题是:当涉及到序列化时,我还有其他选择吗?是否有可能JMS Serializer无法找出循环?

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

关于你的第二个问题,在原则中甚至不鼓励在两个方向上都有引用,所以JMSSerializer抛出某种异常而不是试图"修复"它似乎是预期的行为。

最新更新