我有一个实体,其中包含一个名为DateTimeInterface
的{{1}}类型的字段,并且我想对该对象对象反序列化JSON对象。
我尝试了completedAt
和DateTimeNormalizer
,但是它们都给我一个错误,提示我无法将字符串/数组分配给DateTime对象。
例如,我有这个实体,
ObjectNormalizer
以及如何使用PHPUnit在测试中创建JSON对象,
class Task
{
private $id;
private $name;
/**
* @var DateTimeInterface
*/
private $completedAt;
}
在我的控制器中,我尝试了此操作(这是一个测试,而不是我的真实代码):
$rawData = json_encode([
'name' => 'test-task',
'completedAt' => Carbon::now()->toRfc3339String(),
// I tried some other formats here, such as datetime array, datetime string, etc.
]);
我收到了这个错误,
NotNormalizableValueException 在属性路径“ completedAt”处给出的预期类型为“ DateTimeInterface”,“ string”的参数。
如何使用多个规范化器反序列化JSON对象?
答案 0 :(得分:1)
如果您希望将json数据转换为创建的实体,则可以使用symfony serialzer
$serializer = new Serializer([new ObjectNormalizer()]); // array of needed normalizer
$serializer->denormalise($json_data,YourEntity::class);
应该可以正常工作
答案 1 :(得分:0)
遵循Symfony文档:https://symfony.com/doc/current/components/serializer.html#recursive-denormalization-and-type-safety
我发现我没有安装此软件包:symfony / property-info