如何在 symfony 中序列化嵌套对象

问题描述 投票:0回答:1

我还有下一堂课

#[Assert\Cascade]
class PropertyPromotionDto implements GetPhoneInterface
{
    public function __construct(
        private string $name,
        #[Assert\NotBlank(message: 'Не может быть пустым')]
        private int $value,

        #[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i'])]
        private DateTimeImmutable $date,

        private NestedDto $nestedDto,

        /** @var NestedDto[] */
        private array $nestedDtos,

        private Phone $phone
    ) {
    }

    public function getPhone(): Phone
    {
        return $this->phone;
    }
}

我有下一个 json

       {
            "name":"Mane",
            "value":42,
            "nestedDto": {"author": "Jane", "age": 35, "date":"2023-09-12"},
            "nestedDtos": [
                {"author": "",  "age": 20, "date":"2023-09-12"},
                {"author": "Pane", "age": 22}
            ]
        }

当我尝试反序列化它时,我发现错误。我尝试使用 Flex 序列化器和 Flex,如下所示

$encoder = [new JsonEncoder()];
            $extractor = new PropertyInfoExtractor([], [new PhpDocExtractor(), new ReflectionExtractor()]);
            $normalizer = [new ArrayDenormalizer(), new ObjectNormalizer(null, null, null, $extractor)];
            $serializer = new \Symfony\Component\Serializer\Serializer($normalizer, $encoder);

            return $serializer->deserialize($data, $type, $format);

无法断言类型异常“类“App\Dto\NestedDto”的“date”属性的类型必须是“App\Dto\DateTimeImmutable”之一(给定“字符串”)。”

请帮忙

php symfony serialization
1个回答
0
投票

您的上下文通过

指定格式
#[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i'])]

您需要您的 JSON 符合此格式:

       {
            "name":"Mane",
            "value":42,
            "nestedDto": {"author": "Jane", "age": 35, "date":"2023-09-12 00:00"},
            "nestedDtos": [
                {"author": "",  "age": 20, "date":"2023-09-12 00:00"},
                {"author": "Pane", "age": 22}
            ]
        }
© www.soinside.com 2019 - 2024. All rights reserved.