PowerShell 2.0 ConvertFrom-Json and ConvertTo-Json implementation PowerShell 2.0 ConvertFrom-Json and ConvertTo-Json implementation powershell powershell

PowerShell 2.0 ConvertFrom-Json and ConvertTo-Json implementation


function ConvertTo-Json20([object] $item){    add-type -assembly system.web.extensions    $ps_js=new-object system.web.script.serialization.javascriptSerializer    return $ps_js.Serialize($item)}function ConvertFrom-Json20([object] $item){     add-type -assembly system.web.extensions    $ps_js=new-object system.web.script.serialization.javascriptSerializer    #The comma operator is the array construction operator in PowerShell    return ,$ps_js.DeserializeObject($item)}

If you're getting the error:

Add-Type : Could not load file or assembly 'System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 or one of its dependencies. The system cannot find the file specified. "

... these registry commands can be run (more details):

   reg add hklm\software\microsoft\.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1 /f   reg add hklm\software\wow6432node\microsoft\.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1 /f


Code with javascriptSerializer return objects with Dictionary inside. Modern convertfrom-JSON (4.0+) return objects only. This code transform deserialize object to modern output :)

function Iterate-Tree($jsonTree) {    $result = @()    foreach ($node in $jsonTree) {        $nodeObj = New-Object psobject        foreach ($property in $node.Keys) {            if ($node[$property] -is [System.Collections.Generic.Dictionary[String, Object]] -or $node[$property] -is [Object[]]) {                $inner = @()                $inner += Iterate-Tree $node[$property]                $nodeObj  | Add-Member -MemberType NoteProperty -Name $property -Value $inner            } else {                $nodeObj  | Add-Member -MemberType NoteProperty -Name $property -Value $node[$property]                #$nodeHash.Add($property, $node[$property])            }        }        $result += $nodeObj    }    return $result}function ConvertFrom-Json20{     [cmdletbinding()]    Param (        [parameter(ValueFromPipeline=$true)][object] $PS_Object    )    add-type -assembly system.web.extensions    $PS_JavascriptSerializer=new-object system.web.script.serialization.javascriptSerializer    $PS_DeserializeObject = ,$PS_JavascriptSerializer.DeserializeObject($PS_Object)     #Convert Dictionary to Objects    $PS_DeserializeObject = Iterate-Tree $PS_DeserializeObject    return $PS_DeserializeObject}