0
這種行爲很神祕!PowerShell cmdlet正在更改返回對象的類型
考慮下面的PowerShell腳本:
[Reflection.Assembly]::LoadFrom("Newtonsoft.Json.dll") | Out-Null
function ConvertFrom-JsonNet {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string] $Json
)
$O = [Newtonsoft.Json.Linq.JObject]::Parse($Json)
Write-Host $O.GetType().Name
return $O
}
Clear-Host
$Json = '{"test":"prop"}'
$O1 = ConvertFrom-JsonNet '{"test":"prop"}'
$O2 = [Newtonsoft.Json.Linq.JObject]::Parse($Json)
Write-Host $O1.GetType().Name
Write-Host $O2.GetType().Name
你所期望的輸出是:
JObject
JObject
JObject
但它不是!它是:
JObject
JProperty
JObject
這怎麼可能?對象的類型如何在的函數JObject
中,但在函數傳出後,它的JProperty
?
'JObject'實現了幾個接口;其中一個是「IEnumerable」。 PowerShell是否檢測到它實現了'IEnumerable'並將它放在流水線上時展開對象? – NathanAldenSr