Я использую Symfony сериализатор. Но если я установлю пакеты композера с --no-dev
флаг, он десериализует данные, которые вместо этого должны быть массивом объектов в массиве массивов.
Это сериализация:
$result = $this->get('serializer')->deserialize(
$request->getContent(),
InputDto::class,
'json'
);
А для десериализации я использую аннотации в DTO.
Вот так выглядит «поле» в DTO для массива объектов:
/**
* @var OrderItemDto[]|Collection
*/
private $items = [];
На основании кода:
https://github.com/symfony/serializer/blob/master/Encoder/JsonDecode.php#L84
Если вы передадите опцию json_decode_associative как ложь
$result = $this->get('serializer')->deserialize(
$request->getContent(),
InputDto::class,
'json',
['json_decode_associative' => false]
);
Не следует пытаться преобразовать его в массив.
Чтобы заставить работать подуровень объекта, вам нужно добавить в app/config/config.yml
в framework
раздел следующие строки:
property_info:
enabled: true