I had the same issue and tried the 2 other answers. Both did not work very smoothly.
- The 
$object = (array) $object; added alot of extra text in my key
names. 
- The serializer didn't use my 
active property because it did not have is in front of it and is a boolean. It also changed the sequence of my data and the data itself. 
So I created a new function in my entity:
/**
 * Converts and returns current user object to an array.
 * 
 * @param $ignores | requires to be an array with string values matching the user object its private property names.
 */
public function convertToArray(array $ignores = [])
{
    $user = [
        'id' => $this->id,
        'username' => $this->username,
        'roles' => $this->roles,
        'password' => $this->password,
        'email' => $this->email,
        'amount_of_contracts' => $this->amount_of_contracts,
        'contract_start_date' => $this->contract_start_date,
        'contract_end_date' => $this->contract_end_date,
        'contract_hours' => $this->contract_hours,
        'holiday_hours' => $this->holiday_hours,
        'created_at' => $this->created_at,
        'created_by' => $this->created_by,
        'active' => $this->active,
    ];
    // Remove key/value if its in the ignores list.
    for ($i = 0; $i < count($ignores); $i++) { 
        if (array_key_exists($ignores[$i], $user)) {
            unset($user[$ignores[$i]]);
        }
    }
    return $user;
}
I basicly added all my properties to the new $user array and made an extra $ignores variable that makes sure properties can be ignored (in case you don't want all of them).
You can use this in your controller as following:
$user = new User();
// Set user data...
// ID and password are being ignored.
$user = $user->convertToArray(["id", "password"]);