Атрибут SerializedName
Атрибут SerializedName вешается на свойство класса
и позволяет указать имя, которое будет использоваться
при преобразовании объекта в массив (сериализации)
и обратно (десериализации). Первым параметром
передаётся строка с новым именем поля. Если атрибут
не указан, компонент Serializer использует имя самого
свойства.
Синтаксис
#[SerializedName(name)]
Пример
Давайте создадим класс сущности и укажем
для свойства createdAt альтернативное имя
'created_at':
<?php
namespace App\Entity;
use Symfony\Component\Serializer\Attribute\SerializedName;
class Article
{
#[SerializedName('created_at')]
public \DateTimeInterface $createdAt;
public string $title;
}
?>
Пример
Давайте сериализуем объект с атрибутом
SerializedName и посмотрим на результат:
<?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();
$article->title = 'article';
$article->createdAt = new \DateTime('2024-01-01');
$res = $serializer->serialize($article, 'json');
return new Response($res);
}
}
?>
Результат выполнения кода:
{"created_at":"2024-01-01T00:00:00+00:00","title":"article"}
Как видите, в JSON-строке поле называется
'created_at', а не createdAt.
Пример
Давайте выполним обратное преобразование - десериализуем JSON в объект:
<?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 = '{"created_at":"2024-01-01T00:00:00+00:00","title":"article"}';
$article = $serializer->deserialize($json, Article::class, 'json');
return new Response($article->createdAt->format('Y-m-d'));
}
}
?>
Результат выполнения кода:
2024-01-01
Компонент Serializer нашёл поле 'created_at'
в JSON и записал его значение в свойство
createdAt объекта.
Смотрите также
-
класс
Serializer,
который выполняет сериализацию и десериализацию -
метод
serialize,
который превращает объект в строку формата -
метод
deserialize,
который превращает строку формата в объект -
атрибут
Groups,
который задаёт группы для сериализации