我试图在json和学说实体之间进行序列化和反序列化,但一直得到这个错误
"无法反规范化AppBundle/Person类型的对象,不支持标准化者发现。"
实体类
<?php
namespace AppBundle'Entity;
class Person
{
private $age;
private $name;
// Getters
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
// Setters
public function setName($name)
{
$this->name = $name;
}
public function setAge($age)
{
$this->age = $age;
}
}
我的控制器
<?php
namespace AppBundle'Controller;
use Symfony'Component'HttpFoundation'Request;
use Symfony'Bundle'FrameworkBundle'Controller'Controller;
use Symfony'Component'HttpFoundation'Response;
use AppBundle'Entity'Person;
use Symfony'Component'Serializer'Serializer;
use Symfony'Component'Serializer'Encoder'XmlEncoder;
use Symfony'Component'Serializer'Encoder'JsonEncoder;
use Symfony'Component'Serializer'Normalizer'ObjectNormalizer;
use Symfony'Component'Serializer'Normalizer'GetSetMethodNormalizer;
class RawGrnController extends Controller
{
public function newAction(Request $request)
{
$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizers = array(new ObjectNormalizer(),new GetSetMethodNormalizer());
$serializer = new Serializer($normalizers, $encoders);
$data =$data = <<<EOF
<person>
<name>foo</name>
<age>99</age>
</person>
EOF;
$person = $serializer->deserialize($data, 'AppBundle'Person', 'xml');
$reaponse = new Response($person);
return $reaponse;
}
}
我从官方Symfony文档中得到了这个代码。我试过在我的实际项目中使用这个,然后得到了上面的错误,我试过文档上的例子,但仍然得到同样的错误。
我已经尝试过的事情
- 将对象序列化为json/xml并试图再次反序列化
- 将json/xml解码为数组,然后反规范化为对象(解码成功,但反规范化给出相同的错误)
- 尝试使用序列化器作为服务,如此处 所述
我不知道我错过了什么让规范化工作。我项目中的对象要复杂得多,但我有点怀疑文档中的例子给出了同样的错误。
对于未来几代,如果您将序列化器注入控制器以反序列化POST请求体(例如),并且出现此错误,您可能只是导入了symfony/serializer
而忘记导入symfony/serializer-pack
关于如何使用序列化器的更多信息