我正在开发Powershell版本2,以实现向后兼容性。因此,我已将 shell 程序启动为powershell -version 2
。我的目标是将字符串格式的JSON转换为可以使用的某些对象。 Here我已经找到了ConvertTo-Json
和ConvertFrom-Json
cmdlet。
我有这个简单的代码:
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
return ,$ps_js.DeserializeObject($item)
}
$jsonString = '{"key1":true, "key2": ["val21", "val22"]}'
$jsonObj = ConvertFrom-Json20 $jsonString
Write-Host $jsonObj.key1
Write-Host $jsonObj.key2
但是,当我运行包含此代码的脚本时,我第一次获得异常,这是第二次正常工作:
PS C:\Users\wakatana\Desktop> .\script.ps1
DeserializeObject : Exception calling "DeserializeObject" with "1" argument(s): "Configuration system failed to initialize"
At C:\Users\wakatana\Desktop\script.ps1:10 char:37
+ return ,$ps_js.DeserializeObject <<<< ($item)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
PS C:\Users\wakatana\Desktop> .\script.ps1
True
val21 val22
我也没有在official documentation下找到此异常。我做错了什么?
最佳答案
这是可行的:将add-type放在脚本顶部。
add-type -assembly system.web.extensions
function ConvertTo-Json20([object] $item){
$ps_js=new-object system.web.script.serialization.javascriptSerializer
return $ps_js.Serialize($item)
}
function ConvertFrom-Json20([object] $item){
$ps_js=new-object system.web.script.serialization.javascriptSerializer
return ,$ps_js.DeserializeObject($item)
}
$jsonString = '{"key1":true, "key2": ["val21", "val22"]}'
$jsonObj = ConvertFrom-Json20 $jsonString
Write-Host $jsonObj.key1
Write-Host $jsonObj.key2
关于powershell - 仅当脚本首次运行时才会发生异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59897367/