Symfony денормализация: рекурсивная денормализация не работает - PullRequest
2 голосов
/ 29 марта 2020

Я пытаюсь десериализовать следующую Json структуру в Profile объект

{
    "label": "lorem label",
    "info": {
        "name": "lorem name",
        "title": "lorem title"
    }
}

У меня есть класс Profile

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);
}

Как говорит symfony документ , у меня установлен и работает phpDocExtractor, и также установлены аннотации do c, также установлена ​​PropertyInfo Component. Но я продолжаю получать это NotNormalizableValueException:

The type of the "info" attribute for class "App\Document\Profile" must be one of "App\Document\Info" ("array" given).

Я застрял с этим на некоторое время, любая помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...