ConvertFrom-Json max length ConvertFrom-Json max length json json

ConvertFrom-Json max length


I had the same problem and was able to solve it like this:

[void][System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions")        $jsonserial= New-Object -TypeName System.Web.Script.Serialization.JavaScriptSerializer $jsonserial.MaxJsonLength  = 67108864$Obj = $jsonserial.DeserializeObject($CourseTypesResponse)

You can use $jsonserial.MaxJsonLength to manipulate the MaxJsonLength property

source: https://social.technet.microsoft.com/Forums/windowsserver/en-US/833c99c1-d8eb-400d-bf58-38f7265b4b0e/error-when-converting-from-json?forum=winserverpowershell&prof=required


I had the same propblem when using Invoke-RestMethod and large JSON collections in the result. I ended up adapting the methods from Parsing json with PowerShell and Json.NET to convert JSON Collections to PowerShell Objects.

# .NET JSON Serializer $global:javaScriptSerializer = New-Object System.Web.Script.Serialization.JavaScriptSerializer$global:javaScriptSerializer.MaxJsonLength = [System.Int32]::MaxValue$global:javaScriptSerializer.RecursionLimit = 99# Functions necessary to parse JSON output from .NET serializer to PowerShell Objectsfunction ParseItem($jsonItem) {        if($jsonItem.PSObject.TypeNames -match "Array") {                return ParseJsonArray($jsonItem)        }        elseif($jsonItem.PSObject.TypeNames -match "Dictionary") {                return ParseJsonObject([HashTable]$jsonItem)        }        else {                return $jsonItem        }}function ParseJsonObject($jsonObj) {        $result = New-Object -TypeName PSCustomObject        foreach ($key in $jsonObj.Keys) {                $item = $jsonObj[$key]                if ($item) {                        $parsedItem = ParseItem $item                } else {                        $parsedItem = $null                }                $result | Add-Member -MemberType NoteProperty -Name $key -Value $parsedItem        }        return $result}function ParseJsonArray($jsonArray) {        $result = @()        $jsonArray | ForEach-Object {                $result += , (ParseItem $_)        }        return $result}function ParseJsonString($json) {        $config = $javaScriptSerializer.DeserializeObject($json)        return ParseJsonObject($config)}


This one worked for me quite well over the years:

Add-Type -Assembly System.Web.Extensionsfunction get-Json($data) {    $json = [System.Web.Script.Serialization.JavaScriptSerializer]::new()    $json.MaxJsonLength = 104857600    $out = $json.Deserialize($data, [System.Object])    return $out}