Атрибут SerializedPath
Атрибут SerializedPath вешается на свойство класса
и указывает путь к этому свойству внутри вложенного
массива или объекта. Первым параметром передаётся строка
пути в формате [key][nestedKey]. При сериализации
значение свойства будет помещено по указанному пути,
а при десериализации - извлечено из него.
Синтаксис
#[SerializedPath(path)]
Пример
Давайте сериализуем объект с вложенной структурой.
Свойство name должно попасть внутрь ключа
user, а свойство age - внутрь
user и затем info:
<?php
namespace App\Entity;
use Symfony\Component\Serializer\Attribute\SerializedPath;
class Article
{
#[SerializedPath('[user][name]')]
public string $name = 'abcde';
#[SerializedPath('[user][info][age]')]
public int $age = 25;
}
?>
Теперь применим сериализатор к объекту:
<?php
namespace App\Controller;
use App\Entity\Article;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Serializer\SerializerInterface;
class ArticleController extends AbstractController
{
public function index(SerializerInterface $serializer): Response
{
$article = new Article();
$res = $serializer->serialize($article, 'json');
return new Response($res);
}
}
?>
Результат выполнения кода:
{"user":{"name":"abcde","info":{"age":25}}}
Пример
Давайте выполним обратную операцию - десериализуем
JSON в объект. Атрибут SerializedPath
автоматически извлечёт значения из вложенных ключей:
<?php
namespace App\Controller;
use App\Entity\Article;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Serializer\SerializerInterface;
class ArticleController extends AbstractController
{
public function index(SerializerInterface $serializer): Response
{
$json = '{"user":{"name":"abcde","info":{"age":25}}}';
$article = $serializer->deserialize($json, Article::class, 'json');
return new Response($article->name . ' ' . $article->age);
}
}
?>
Результат выполнения кода:
"abcde 25"
Смотрите также
-
класс
Serializer,
который выполняет сериализацию и десериализацию -
метод
serialize,
который превращает объект в строку формата -
метод
deserialize,
который восстанавливает объект из строки -
атрибут
SerializedName,
который задаёт альтернативное имя свойства