Ошибка сериализатора JMS, когда свойство не существует

Я создаю проект 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», десериализатор игнорирует атрибут «title» в строке Json.
и это приводит к:

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

Ну нет проблем там. Данные в базе данных неверны. Но я хотел бы записать эту проблему. Как мне это сделать? Я не хочу связываться с кодом сериализатора JMS, если это возможно (так как я больше не могу его обновлять). И поиск пустых свойств в моем TestClass тоже не лучший способ, так как они могут быть нулевыми.

5

Решение

Сериализатор JMS позволяет настраивать обработчики и прослушиватели событий, в вашем случае я думаю, что прослушивателя событий будет достаточно, поскольку вы просто будете ожидать возникновения определенной ситуации (непревзойденный атрибут).
В этот момент вы просто хотите записать это в журнал, поэтому курс будет следующим:

  1. Создайте класс слушателя, который реализует JMS \ Serializer \ EventDispatcher \ EventSubscriberInterface
  2. Заставьте слушателя написать строку журнала, когда ваше условие выполнено.
  3. Подпишите этого слушателя на событие.

Я напишу более подробное описание, когда вернусь домой с работы этим вечером, но я подумал, что, может быть, это уже поможет вам.

Проверьте документы для более подробной информации:
http://jmsyst.com/bundles/JMSSerializerBundle/master/configuration#event-dispatcher
А подписчики по умолчанию могут дать вам подсказку:
https://github.com/schmittjoh/serializer/tree/master/src/JMS/Serializer/EventDispatcher/Subscriber

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]