无法对类型的对象进行非规范化,找不到支持的规范化器。 Symfony 2.8

时间:2016-09-19 15:29:02

标签: php json symfony serialization

我正在尝试在json和doctrine实体之间进行序列化和反序列化,但一直收到此错误

  

“无法对AppBundle / Person类型的对象进行非规范化,没有支持   找到normalizer。 “

我的实体类

<?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获得了这段代码。我试图在我的真实项目中使用它,然后得到了上面的错误,我在文档上尝试了示例,但仍然得到了相同的错误。< / p>

到目前为止我尝试过的事情

  • 将对象序列化为json / xml并尝试再次反序列化
  • 将json / xml解码为一个数组,然后对一个对象进行非规范化(解码成功,但非规范化会产生相同的错误)
  • 尝试使用序列化程序作为服务,如Here
  • 中所述

我不知道我缺少什么让标准化工具正常工作。我的项目中的对象要复杂得多,但我有点怀疑,因为文档中的示例给出了同样的错误。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:2)

对于后代,如果您将序列化程序注入控制器以反序列化 POST 请求正文(例如)并且出现此错误,您可能只是导入了 symfony/serializer 而忘记导入了 {{1} }

关于How to use the serializer的更多信息