Метод deserialize
Метод deserialize класса Serializer
выполняет обратное преобразование: принимает строку
с данными (например, JSON или XML) и превращает её
в объект заданного класса. Первым параметром
передаётся строка с данными, вторым - целевой класс,
третьим - формат данных (например, 'json').
Метод возвращает готовый объект.
Синтаксис
$serializer->deserialize(string $data, string $type, string $format, array $context = [])
Пример
Давайте десериализуем JSON-строку в объект класса Article:
<?php
namespace AppService;
use AppEntityArticle;
use SymfonyComponentSerializerSerializer;
use SymfonyComponentSerializerEncoderJsonEncoder;
use SymfonyComponentSerializerNormalizerObjectNormalizer;
$encoders = [new JsonEncoder()];
$normalizers = [new ObjectNormalizer()];
$serializer = new Serializer($normalizers, $encoders);
$json = '{"title":"hello","text":"abcde","views":1}';
$article = $serializer->deserialize($json, Article::class, 'json');
echo $article->getTitle();
?>
Результат выполнения кода:
"hello"
Пример
Давайте десериализуем JSON-массив в массив объектов:
<?php
namespace AppService;
use AppEntityArticle;
use SymfonyComponentSerializerSerializer;
use SymfonyComponentSerializerEncoderJsonEncoder;
use SymfonyComponentSerializerNormalizerObjectNormalizer;
$encoders = [new JsonEncoder()];
$normalizers = [new ObjectNormalizer()];
$serializer = new Serializer($normalizers, $encoders);
$json = '[{"title":"article 1"},{"title":"article 2"}]';
$articles = $serializer->deserialize($json, Article::class . '[]', 'json');
foreach ($articles as $article) {
echo $article->getTitle() . ' ';
}
?>
Результат выполнения кода:
"article 1 article 2 "
Пример
Давайте передадим контекст для управления процессом десериализации:
<?php
namespace AppService;
use AppEntityArticle;
use SymfonyComponentSerializerSerializer;
use SymfonyComponentSerializerEncoderJsonEncoder;
use SymfonyComponentSerializerNormalizerObjectNormalizer;
$encoders = [new JsonEncoder()];
$normalizers = [new ObjectNormalizer()];
$serializer = new Serializer($normalizers, $encoders);
$json = '{"title":"abcde","views":5}';
$article = $serializer->deserialize($json, Article::class, 'json', [
'allow_extra_attributes' => false,
]);
echo $article->getViews();
?>
Результат выполнения кода:
"5"
Смотрите также
-
класс
Serializer,
который выполняет сериализацию и десериализацию данных -
метод
serialize,
который преобразует объект в строку данных -
метод
denormalize,
который преобразует массив в объект -
метод
normalize,
который преобразует объект в массив