【问题标题】:Could not denormalize object of type, no supporting normalizer found. Symfony 2.8无法对类型对象进行非规范化,找不到支持的规范化器。 Symfony 2.8
【发布时间】: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-&gt;deserialize($data, 'AppBundle\Entity\Person', 'xml');吗?注意命名空间
  • @ka_lin 是但出现同样的错误
  • $person = $serializer-&gt;deserialize($data, Person::class, 'xml'); 这对我有用,但我不知道如何解释这种行为。谁能解释一下?

标签: php json symfony serialization


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 2013-03-08
    • 2020-07-09
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 2018-12-12
    相关资源
    最近更新 更多