eng*_*ial 2 serialization symfony
class Item
{
public $id;
//..getters and setters
}
$data = [['id' => 1], ['id' => 2]];
$serializer = new Serializer([new GetSetMethodNormalizer(), new ArrayDenormalizer()]);
$model = $serializer->denormalize($data, "Item[]");
dump($model);die;
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Could not denormalize object of type Item[], no supporting normalizer found.
就像在这个例子中一样 - https://symfony.com/doc/current/components/serializer.html#handling-arrays 为什么我收到错误?
我像这样使用它:
Serializer 组件也能够处理对象数组。序列化数组就像序列化单个对象一样:
use Acme\Person;
$person1 = new Person();
$person1->setName('foo');
$person1->setAge(99);
$person1->setSportsman(false);
$person2 = new Person();
$person2->setName('bar');
$person2->setAge(33);
$person2->setSportsman(true);
$persons = array($person1, $person2);
$data = $serializer->serialize($persons, 'json');
// $data contains [{"name":"foo","age":99,"sportsman":false},{"name":"bar","age":33,"sportsman":true}]
Run Code Online (Sandbox Code Playgroud)
如果要反序列化这样的结构,则需要将ArrayDenormalizer加到规范化器集中。通过将 [] 附加到deserialize()方法的类型参数,表明您需要一个数组而不是单个对象。
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;
use Symfony\Component\Serializer\Serializer;
$serializer = new Serializer(
array(new GetSetMethodNormalizer(), new ArrayDenormalizer()),
array(new JsonEncoder())
);
$data = ...; // The serialized data from the previous example
$persons = $serializer->deserialize($data, 'Acme\Person[]', 'json');
Run Code Online (Sandbox Code Playgroud)
在此处阅读更多信息: https : //symfony.com/doc/current/components/serializer.html