当属性不存在时,JMS序列化程序会出错

时间:2015-04-21 12:15:37

标签: php json jmsserializerbundle symfony-2.6

我正在创建一个symfony2项目并使用JMS序列化程序包来序列化我的对象以进行数据库存储(我知道这不是最好的方法)。

但现在我的问题是, 当我更改对象的属性并反序列化Json字符串时,JMS序列化程序忽略不存在的属性而不是抛出错误,这实际上很棒。但我想记录这样的事件。

下面是一个说明我的问题的例子

我的数据库中的Json字符串:

$dataToBeDeserialized = {"title":"testing123","text":"Lorem Ipsum"}

识别TestClass:

/**
 * @Type("string") 
 */
protected title;

/**
 * @Type("string") 
 */
protected text;

反序列化方法:

$this->serializer = SerializerBuilder::create()->build();
$this->serializer->deserialize($dataToBeDeserialized, 'TestClass', 'json');

这导致:

TestClass {
  title: "testing123",
  text: "Lorem Ipsum"}

但是当我更改我的Testclass并重命名(或删除)标题时,让我们说“title2”,反序列化器忽略Json字符串中的“title”属性。 这导致:

  TestClass {
  title2: "",
  text: "Lorem Ipsum"}

那里没问题。数据库中的数据是错误的。但我想记录这个问题。我该怎么做?如果可能的话,我不想搞乱JMS序列化程序的代码(因为我不能再更新它)。在我的TestClass中查找空属性也不是最好的方法,因为它们可以为null。

1 个答案:

答案 0 :(得分:0)

JMS Serializer允许配置处理程序和事件监听器,在您的情况下,我认为事件监听器就足够了,因为您只是等待某种情况的发生(一个不匹配的属性)。 此时您只想将其写入日志,因此课程将如下:

  1. 创建一个实现JMS \ Serializer \ EventDispatcher \ EventSubscriberInterface的侦听器类
  2. 在满足条件时让侦听器写入日志行。
  3. 为此活动订阅此监听器。
  4. 我今晚下班回家时会写一个更详细的说明,但我想也许这可以帮助你了。

    查看文档了解更多详情: http://jmsyst.com/bundles/JMSSerializerBundle/master/configuration#event-dispatcher 默认订阅者可能会给你一个线索: https://github.com/schmittjoh/serializer/tree/master/src/JMS/Serializer/EventDispatcher/Subscriber