Чтобы ответить на ваш прямой вопрос, нет, не нужно было делать это с json_encode / json_decode. JSON был разработан и определен как формат для кодирования информации, а не для сериализации объектов. Функция PHP не выходит за рамки этого.
Если вы заинтересованы в воссоздании объектов из JSON, одним из возможных решений является статический метод для всех объектов вашей иерархии, который принимает строку stdClass / и заполняет переменные, которые выглядят примерно так
//semi pseudo code, not tested
static public function createFromJson($json){
//if you pass in a string, decode it to an object
$json = is_string($json) ? json_decode($json) : $json;
foreach($json as $key=>$value){
$object = new self();
if(is_object($value)){
$object->{$key} = parent::createFromJson($json);
}
else{
$object->{$key} = $value;
}
}
return $object;
}
Я не проверял это, но я надеюсь, что это поможет. В идеале все ваши объекты должны исходить от некоторого базового объекта (обычно называемого «класс объекта»), поэтому вы можете добавить этот код только в одном месте.