【发布时间】:2019-03-28 03:14:50
【问题描述】:
我有一个实体,它包含一个名为 completedAt 的 DateTimeInterface 类型字段,我想将 JSON 对象反序列化为该实体对象。
我尝试了DateTimeNormalizer 和ObjectNormalizer,但它们都给了我一个错误,说我无法将字符串/数组分配给 DateTime 对象。
例如,我有这个实体,
class Task
{
private $id;
private $name;
/**
* @var DateTimeInterface
*/
private $completedAt;
}
以及如何在我的测试中使用 PHPUnit 创建 JSON 对象,
$rawData = json_encode([
'name' => 'test-task',
'completedAt' => Carbon::now()->toRfc3339String(),
// I tried some other formats here, such as datetime array, datetime string, etc.
]);
在我的控制器中,我尝试了这个(这是一个测试,不是我的真实代码):
public function update(Request $request, Task $task, SerializerInterface $serializer): Response
{
$task = new Task();
$task->setName('test');
$task->setCompletedAt(Carbon::now()->toDateTime());
$json = $serializer->serialize($task, 'json');
$serializer = new Serializer([new ObjectNormalizer(), new DateTimeNormalizer()], [new JsonEncoder()]); // array of needed normalizer
var_dump($serializer->deserialize($json, Task::class, 'json'));
}
我收到了这个错误,
NotNormalizableValueException 属性路径“completedAt”中给出的“DateTimeInterface”、“字符串”类型的预期参数。
如何使用多个规范化器反序列化该 JSON 对象?
【问题讨论】:
-
您能向我们展示您发送的 JSON 有效负载吗?
-
@thomas.drbg 更新了描述。谢谢。