无法对类型对象进行反规范化,没有找到支持的规范化程序.Symfony 2.8


Could not denormalize object of type, no supporting normalizer found. Symfony 2.8

我试图在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

关于如何使用序列化器的更多信息