Symfony反规范化:递归反规范化不起作用

Symfony反规范化:递归反规范化不起作用,symfony,denormalization,Symfony,Denormalization,我正试图将下面的Json结构理想化为Profile对象 { "label": "lorem label", "info": { "name": "lorem name", "title": "lorem title" } } 我有一个班级档案 namespace App\Document; class profile { /** * @var string */ protected $label; /

我正试图将下面的Json结构理想化为
Profile
对象

{
    "label": "lorem label",
    "info": {
        "name": "lorem name",
        "title": "lorem title"
    }
}
我有一个班级
档案

namespace App\Document;

class profile
{
   /**
    * @var string
    */
   protected $label;

   /**
    * @var Info
    */
   protected $info;

// getters and setters
}
和类
Info

namespace App\Document;

class Info
{
    /**
     * @var string
     */
    protected name;

    /**
     * @var string
     */
    protected title;

    // getters & setters
}
我的控制器代码如下

use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use App\Document;

public function addProfile(Request $request, DocumentManager $dm, $profile_id)
{
    $phpDocNormalizer = new ObjectNormalizer(null, null, null, new PhpDocExtractor());
    $reflectionNormalizer = new ObjectNormalizer(null, null, null, new ReflectionExtractor());
    $serializer = new Serializer([$phpDocNormalizer, $reflectionNormalizer], [new JsonEncoder()]);

    $profile = $serializer->deserialize($request->getContent(), Profile::class, 'json');

    return new JsonResponse(Response::HTTP_CREATED);
}
正如上面所说的,我已经设置了phpDocExtractor并开始工作,文档注释也设置好了,
PropertyInfo组件也安装好了。但是我一直得到这个
NotNormalizableValueException

类“App\Document\Profile”的“info”属性的类型必须是“App\Document\info”(“给定数组”)中的一种。


我已经被这个问题困扰了一段时间,非常感谢您的帮助

嗨!我有一段时间没有使用Symfony,但是您是否尝试过反规范化函数?您好,是的,我确实这样做了,就像文档中说的那样,但我仍然得到了同样的异常,即信息应该是一个对象,但数组是给定的,从逻辑上讲,这个异常应该在规范化时抛出,因为反规范化需要一个数组作为输入,但我无法找出我缺少了什么。setter是否也有类型提示(你省略了它们,所以我在问)是的,我确保了这一点,因为我使用的是ReflectionExtractor,setInfo有这个签名
setInfo(Info$Info)
,此外我还添加了@var注释。