我还有下一堂课
#[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”之一(给定“字符串”)。”
请帮忙
您的上下文通过
指定格式#[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}
]
}