【发布时间】:2020-04-26 10:47:28
【问题描述】:
对象反序列化时出现如下错误:
Symfony\Component\Serializer\Exception\NotNormalizableValueException
类“shop\manage\flexbe\objects\Lead”的“products”属性类型必须是“shop\manage\flexbe\objects\Product[]”之一(给定“array”)。
有 JSON 对象:
{
"id": "9757241",
"time": "1567105530",
// other params
"products": [
{
"title": "Product name",
"count": 1
}
]
}
在描述对象相关方法到“产品”的Lead类中:
private $products = [];
/**
* @return Product[]
*/
public function getProducts()
{
return $this->products;
}
/**
* @param Product $product
*/
public function addProduct(Product $product): void
{
$this->products[] = $product;
}
反序列化代码:
$normalizer = new ObjectNormalizer(null, null, new PropertyAccessor(), new ReflectionExtractor());
$serializer = new Serializer(array($normalizer), array(new JsonEncoder()));
$lead = $serializer->deserialize($data, Lead::class, 'json');
我不明白问题出在哪里。预计使用 addProduct() 方法的反序列化器应该绕过数组并将所有对象添加到 Product 类中,例如 in this case。
【问题讨论】:
标签: symfony