Не удается сериализовать сущность Symfony с помощью Datetime / десериализации

#php #symfony #serialization #deserialization

Вопрос:

Я пытаюсь сохранить объект в виде файла json. Класс сущностей также включает поле даты и времени:

 class Ear
{
...
    /**
     * @ORMColumn(type="date")
     */
    private $date;
...
}
 

Затем я создаю новое Ухо:

 $earLine = new Ear();
$earLine->setDate(new DateTime());
 

Теперь я просто думаю, что могу нормализовать и сериализовать этот объект:

 $encoders = [new JsonEncoder()];
$normalizers = [new DateTimeNormalizer(), new ObjectNormalizer()];
$serializer = new Serializer($normalizers, $encoders);

$json = $serializer->serialize($earLine, 'json');
 

что прекрасно работает. Json выглядит так:

 {
  "id": null,
  "date": "2021-05-31T00:00:00 02:00",
  ...
}
 

Однако при попытке десериализации он не может денормализовать дату и время.

 $encoders = [new JsonEncoder()];
$normalizers = [new DateTimeNormalizer(), new ObjectNormalizer()];
$serializer = new Serializer($normalizers, $encoders);

dd($serializer->deserialize($json, Ear::class, 'json'));
 

с ошибкой Failed to denormalize attribute "date" value for class "AppEntityEar": Expected argument of type "DateTimeInterface", "string" given at property path "date".

Я читаю документы вверх и вниз и ищу stackoverflow. Но это не удается по непонятной причине, по крайней мере, для меня.

Использование Symfony 5.3.

Комментарии:

1. Не могли бы вы добавить сериализованный JSON в вопрос?

2. Я только что протестировал ваш код с PHP FPM 7.4.18 и Symfony 4.4.26, там он отлично работает. Для этого примера мой класс Ear содержал только date . Может быть, это полезная информация для вас.

3. @KhorneHoly спасибо. Обновил сообщение с помощью сериализованного JSON.

4. @KhorneHoly Я прокомментировал все остальные свойства для целей тестирования. Все та же ошибка: Serializer->deserialize(array('id' => null, 'date' => '2021-05-31T00:00:00 02:00'), 'App\Entity\Ear', 'json') — работает на Devilbox PHP 7.3

5. Не могли бы вы проверить использование кодера, Нормализатора и сериализатора? Может быть, вы случайно используете компонент из другого пакета вместо symfony?