Desde a versão 5.4 do PHP ficou mais fácil transformar entidades em JSON através da função json_encode(). Basta implementar a interface JsonSerializable, no qual o único método que precisa ser implementado pela subclasse é o jsonSerialize.

class User implements \JsonSerializable {

    private $username;
    private $firstName;
    private $lastName;

    ...

    public function jsonSerialize() {
        return array(
            'username' => $this->username,
            'firstName' => $this->firstName,
            'lastName' => $this->lastName,
            'fullName' => "{$this->firstName} {$this->lastName}"
        );
    }

}

Serializando:

$user = new User();
$user->setUsername("rogeriolino");
$user->setFirstName("Rogério");
$user->setLastName("Lino");
echo json_encode($user);

Resultado:

{
    "username": "rogeriolino",
    "firstName": "Rogério",
    "lastName": "Lino",
    "fullName": "Rogério Lino",
}

Essa implementação se torna muito útil para desenvolvimento de APIs RESTful e ajax responses (json response).