首页 > 解决方案 > Invoke-RestMethod: POST Assoc-Array 使用 JSON 到 WebService (System.Collections.Hashtable)

问题描述

我想将关联数组发布到 Web 服务。

因此,我以这种方式在 PowerShell 中创建数组:

$Data = @{
    "MyProperty" = "bla bla";
    "MyFolder" = @{
        "MySubFolder1" = @{
            "MySubProperty" = "bla bla";
        }
        "MySubFolder2" = @{
            "MySubProperty" = "bla bla";
        }
    }
}

我使用以下行将数据发布到 Web 服务:

$Response = Invoke-RestMethod -Method Post -Uri $URL -Body $Data

关键是,并不是整个阵列都到达了网络服务。
只有顶层数据被正确接收。嵌套数组不可访问。(System.Collections.Hashtable)
它看起来像这样:

Array
(
    [MyProperty] => bla bla
    [MyFolder] => System.Collections.Hashtable
)

我也确实尝试Invoke-WebRequest过使用Invoke-RestMethodConvertTo-JSON,但我无法找到一个干净的解决方案来将数据很好地传输到 Web 服务。

我怎么解决这个问题?

谢谢!

标签: powershell

解决方案


$Data必须使用ConvertTo-JSON.

使用以下代码行可以解决问题:

$Response = Invoke-RestMethod -Method Post -Uri $URL -Body ( $Data | ConvertTo-JSON -Compress ) -ContentType "application/json; charset=utf-8"

推荐阅读