Festi De/Serialization

class Block
{
    #[JsonProperty("name")]
    private string $name;

    #[JsonProperty]
    protected int $value;

    public string $test;

    private SubBlock $sub;

    public array $alias;
}

class SubBlock
{
    #[JsonProperty("name")]
    private string $name;
}

$json = '{"name": "Test", "value": 5, "test": "empty", "sub":{"name": "sub"}, "alias": {"t":"test alias item"}}';

$object = Deserialize::toObject($json, Block::class);

Constructor

class BlockConstructor
{
    public function __construct(protected string $test, #[JsonProperty("sub", true)] private SubBlock $block)
    {

    }

    public function getTest()
    {
        return $this->test;
    }

    public function getSub()
    {
        return $this->block;
    }
}

$json = '{"test": "empty", "sub":{"name": "sub"}}';

$object = Deserialize::toObject($json, BlockConstructor::class);

Method

class ValuesObjectMethods
{
    private int $testId;

    private SubBlock $testBlock;

    #[JsonProperty("id")]
    public function setID(int $id): void
    {
        $this->testId = $id;
    }

    #[JsonProperty("block")]
    public function setBlock(SubBlock $block): void
    {
        $this->testBlock = $block;
    }

    public function getID(): int
    {
        return $this->testId;
    }

    public function getBlock(): SubBlock
    {
        return $this->testBlock;
    }
}

$values = array(
    'id' => 5,
    'block' => array(
        'name' => 'block'
    )
);

$result = Deserialize::toArrayObject($values, ValuesObjectMethods::class);