使用 WebServiceProxy 时,ConvertFrom-JSON 不会接受带有子项的 convertto-json
ConvertFrom-JSON won't accept convertto-json with children when working with WebServiceProxy
我正在使用 PowerShell 4.0 中的 New-WebServiceProxy 从 API 中提取数据,然后将其通过管道传输到 JSON 文件以供审查并导入另一个 API 服务(相同的 API 版本等,只是不同的主机)。
$tasklist.Taskconfig | ConvertTo-JSON-Depth 50 -As String | Out-File -FilePath $exportpath$name.xml -Force
给我包含 TaskConfig 的 XML。在这种情况下,TaskConfig 是由我正在与之交互的 API 自动生成的对象类型。当我想导入我正在使用的内容时:
$taskconfig = (Get-Content "$taskjson") -join "`n" | ConvertFrom-Json
但是当我 运行 这样做时,它无法创建对象。我假设这是因为 JSON 包含嵌套的子项,给出错误 -
Cannot convert value "@{Name=plugindive; Value=;> Children=System.Object[]}" to type "Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1rcleWeb_WebClientAPI_asmx_wsdl.TaskConfig". Error: "Cannot convert the "@{Name=plugindive; Value=;Children=System.Object[]}" value of type "System.Management.Automation.PSCustomObject" to type "Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1rcleWeb_WebClientAPI_asmx_wsdl.TaskConfig"."
我试过明确说明对象的类型:
$taskconfig = [Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1rcleWeb_WebClientAPI_asmx_wsdl.TaskConfig](Get-Content "$taskjson" | Out-string | ConvertFrom-Json)
以及创建对象然后尝试从我的 JSON 添加子项 -
$taskconfig.children = $json.children
但是这些都以同样的方式失败了。
我似乎没有足够有趣地在 PowerShell 5.0 中遇到同样的问题,但我无法验证原因 - 是否有其他方法可以解决此问题?
在下面添加了示例 JSON
{"Name": "plugindive",
"Value": null,
"Children": [{
"Name": "auto",
"Value": "False",
"Children": [
]
},
{
"Name": "categories",
"Value": null,
"Children": [{
"Name": "Module Z",
"Value": "False",
"Children": [
]
},
{
"Name": "Module A",
"Value": "False",
"Children": [
]
},
{
"Name": "Module B",
"Value": "False",
"Children": [
]
},
{
"Name": "Module C",
"Value": "False",
"Children": [
]
}
]
}
]
}
这似乎在 PowerShell v3.0 中不起作用,所以我最终直接使用显式 XML 发帖,而不是转换为 JSON。
我正在使用 PowerShell 4.0 中的 New-WebServiceProxy 从 API 中提取数据,然后将其通过管道传输到 JSON 文件以供审查并导入另一个 API 服务(相同的 API 版本等,只是不同的主机)。
$tasklist.Taskconfig | ConvertTo-JSON-Depth 50 -As String | Out-File -FilePath $exportpath$name.xml -Force
给我包含 TaskConfig 的 XML。在这种情况下,TaskConfig 是由我正在与之交互的 API 自动生成的对象类型。当我想导入我正在使用的内容时:
$taskconfig = (Get-Content "$taskjson") -join "`n" | ConvertFrom-Json
但是当我 运行 这样做时,它无法创建对象。我假设这是因为 JSON 包含嵌套的子项,给出错误 -
Cannot convert value "@{Name=plugindive; Value=;> Children=System.Object[]}" to type "Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1rcleWeb_WebClientAPI_asmx_wsdl.TaskConfig". Error: "Cannot convert the "@{Name=plugindive; Value=;Children=System.Object[]}" value of type "System.Management.Automation.PSCustomObject" to type "Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1rcleWeb_WebClientAPI_asmx_wsdl.TaskConfig"."
我试过明确说明对象的类型:
$taskconfig = [Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1rcleWeb_WebClientAPI_asmx_wsdl.TaskConfig](Get-Content "$taskjson" | Out-string | ConvertFrom-Json)
以及创建对象然后尝试从我的 JSON 添加子项 -
$taskconfig.children = $json.children
但是这些都以同样的方式失败了。
我似乎没有足够有趣地在 PowerShell 5.0 中遇到同样的问题,但我无法验证原因 - 是否有其他方法可以解决此问题?
在下面添加了示例 JSON
{"Name": "plugindive",
"Value": null,
"Children": [{
"Name": "auto",
"Value": "False",
"Children": [
]
},
{
"Name": "categories",
"Value": null,
"Children": [{
"Name": "Module Z",
"Value": "False",
"Children": [
]
},
{
"Name": "Module A",
"Value": "False",
"Children": [
]
},
{
"Name": "Module B",
"Value": "False",
"Children": [
]
},
{
"Name": "Module C",
"Value": "False",
"Children": [
]
}
]
}
]
}
这似乎在 PowerShell v3.0 中不起作用,所以我最终直接使用显式 XML 发帖,而不是转换为 JSON。