PowerShell Deep Clone and Recursive Merge of Hashtables

PowerShell
function Merge-DeepObject {
    param(
        [Parameter(Mandatory)][hashtable]$Base,
        [Parameter(Mandatory)][hashtable]$Overlay
    )
    $clone = $Base | ConvertTo-Json -Depth 32 | ConvertFrom-Json -AsHashtable
    foreach ($key in $Overlay.Keys) {
        $value = $Overlay[$key]
        if ($clone[$key] -is [hashtable] -and $value -is [hashtable]) {
            $clone[$key] = Merge-DeepObject -Base $clone[$key] -Overlay $value
        } else {
            $clone[$key] = $value
        }
    }
    return $clone
}