【发布时间】:2017-01-27 08:37:31
【问题描述】:
我正在尝试在 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 官方文档 Here 获得此代码。我曾尝试在我的实际项目中使用它并遇到上述错误,然后我尝试了文档上的示例但仍然遇到相同的错误。
到目前为止我尝试过的事情
- 将对象序列化为 json/xml 并尝试再次反序列化它
- 将 json/xml 解码为数组,然后反规范化为对象(解码成功,但反规范化给出相同的错误)
- 尝试将序列化程序用作Here 中所述的服务
我不知道我缺少什么来让规范器工作。我项目中的对象要复杂得多,但我有点怀疑,因为文档中的示例给出了相同的错误。非常感谢任何帮助。
【问题讨论】:
-
你试过
$person = $serializer->deserialize($data, 'AppBundle\Entity\Person', 'xml');吗?注意命名空间 -
@ka_lin 是但出现同样的错误
-
$person = $serializer->deserialize($data, Person::class, 'xml');这对我有用,但我不知道如何解释这种行为。谁能解释一下?
标签: php json symfony serialization