Private/Runtime/ConvertTo-OpenApiJsonReady.ps1
|
function ConvertTo-OpenApiJsonReady { <# .SYNOPSIS Copies a value into plain dictionaries and arrays that ConvertTo-Json writes the same on 5.1 and 7 (dates as ISO 8601, switches as booleans, nulls kept). #> [CmdletBinding()] [OutputType([object])] param( [Parameter()] [AllowNull()] [object]$InputObject, [Parameter()] [int]$Depth = 0 ) if ($null -eq $InputObject) { return $null } if ($Depth -gt 64) { throw 'The body is nested more than 64 levels deep.' } $invariant = [System.Globalization.CultureInfo]::InvariantCulture if ($InputObject -is [System.Management.Automation.SwitchParameter]) { return $InputObject.IsPresent } if ($InputObject -is [datetime] -or $InputObject -is [System.DateTimeOffset]) { return $InputObject.ToString('o', $invariant) } if ($InputObject -is [enum]) { return $InputObject.ToString() } if ($InputObject -is [string] -or $InputObject -is [char] -or $InputObject -is [bool] -or $InputObject -is [System.ValueType]) { return $InputObject } if ($InputObject -is [guid] -or $InputObject -is [uri] -or $InputObject -is [version]) { return $InputObject.ToString() } if ($InputObject -is [System.Collections.IDictionary] -or $InputObject -is [System.Management.Automation.PSCustomObject]) { $copy = [ordered]@{} foreach ($pair in (ConvertTo-OpenApiPropertyList -InputObject $InputObject)) { $copy[$pair.Name] = ConvertTo-OpenApiJsonReady -InputObject $pair.Value -Depth ($Depth + 1) } return $copy } if ($InputObject -is [System.Collections.IEnumerable]) { $items = New-Object System.Collections.Generic.List[object] foreach ($item in $InputObject) { $items.Add((ConvertTo-OpenApiJsonReady -InputObject $item -Depth ($Depth + 1))) } return , $items.ToArray() } return $InputObject } |