powershell - 仅在脚本第一次运行时发生异常
问题描述
我正在为 powershell 版本 2 开发以实现向后兼容性。所以我已经开始我的外壳了powershell -version 2
。我的目标是将字符串格式的 JSON 转换为我可以使用的某个对象。在这里,我找到了
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
另外我在官方文档下也没有发现这个异常。我做错了什么?
解决方案
这是有效的:在脚本之上采用 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
推荐阅读
- node.js - 为什么从前一个请求中获取的数据会显示在后续请求中?
- flutter - 有什么方法可以更改图像选择器的文件名?
- c - 当一个程序同时包含套接字服务器和客户端时,我们应该注意什么?
- react-native - 使用 mobx 或 redux 还是使用存储库模式和持久本地存储领域或 sqlite?
- android - 'onRequestPermissionsResult' 不覆盖任何内容
- winapi - winapi中STR的数据类型是什么?
- flutter - 在设备浏览器中打开 PDF 链接 - Flutter
- django - Django 模型表单未保存到数据库
- flutter - Flutter ValueListenableBuilder 结果更新状态以显示/隐藏小部件
- r - R:数据框操作