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}