Php Symfony中的序列化和反序列化

Php Symfony中的序列化和反序列化,php,json,symfony,serialization,Php,Json,Symfony,Serialization,我正在使用Symfony bundle“Symfony/serializer”序列化实体 我能够毫无问题地将实体编码为json,但是我在反序列化它并将其恢复为原始形式时遇到了问题。我收到的错误是 Could not denormalize object of type AppBundle:Entity, no supporting normalizer found. DefaultController.php //Create Entity to Serialize $enti

我正在使用Symfony bundle“Symfony/serializer”序列化实体

我能够毫无问题地将实体编码为json,但是我在反序列化它并将其恢复为原始形式时遇到了问题。我收到的错误是

Could not denormalize object of type AppBundle:Entity, no supporting normalizer found.
DefaultController.php

    //Create Entity to Serialize
    $entity = new Entity();
    $entity->setId(1);
    $entity->setName('john');

    //create serializer to serialize entity
    $encoders = array(new XmlEncoder(), new JsonEncoder());
    $normalizers = array(new ObjectNormalizer());
    $serializer = new Serializer($normalizers, $encoders);
    $jsonContent = $serializer->serialize($entity, 'json');

    var_dump($jsonContent); // returns string '{"id":1,"name":"john"}' (length=22)  << GOOD!


    //Deserialize entity
    $person = $serializer->deserialize($jsonContent, 'AppBundle:Entity', 'json');
    //<ERROR HERE>//

    var_dump($person); 
不太确定我遗漏了什么,非常感谢您的帮助。

反序列化()应该获得实体的名称空间,因此您需要更改
AppBundle:Entity
AppBundle\Entity

$person = $serializer->deserialize($jsonContent, 'AppBundle\Entity', 'json');

Symfony的序列化程序组件非常有趣(我不再使用JMS序列化程序…)

唯一需要配置的是:规范化器

规范化器是使用标记注册的简单服务

有一些内置类,如:

  • Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
    :使用getter和setter进行(反)规范化
  • Symfony\Component\Serializer\Normalizer\PropertyNormalizer
    :使用反射来(反)规范化
  • Symfony\Component\Serializer\Normalizer\CustomNormalizer
    :提供一种方法,以编程方式定义规范化的行为
对于您的情况,只需注册此服务:

<service id="app.normalizer.get_set" class="Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer">
    <tag name="serializer.normalizer" priority="0" />
</service>


您已全部设置

反序列化器类型应为名称空间,包括由两个反斜杠分隔的实体名称:

$person = $serializer->deserialize($jsonContent, 'AppBundle\\Entity', 'json');

好的地方,但我恐怕没有运气,我相信这可能与实体类有关,嗯……symfony序列化程序非常有限。请看一看。它的威力要大得多
$person = $serializer->deserialize($jsonContent, 'AppBundle\\Entity', 'json');