当使用Add Member将Powershell对象添加到子项时,如何正确地将该对象持久化为JSON?

当使用Add Member将Powershell对象添加到子项时,如何正确地将该对象持久化为JSON?,json,powershell,Json,Powershell,我在使用一些PowerShell代码时遇到了一些挑战,这里显示了一个经过简化和消毒的版本: $outer = ("{""Child"": {""Grandchild"": {}}}" | ConvertFrom-Json ) $inner = $outer.Child.Grandchild $newId = [guid]::NewGuid(); $nested = ("{ ""Id"": ""$newId"", ""Name"": ""The Name Goes Here"" }

我在使用一些PowerShell代码时遇到了一些挑战,这里显示了一个经过简化和消毒的版本:

$outer = ("{""Child"": {""Grandchild"": {}}}" | ConvertFrom-Json )
$inner = $outer.Child.Grandchild
$newId = [guid]::NewGuid();
$nested = ("{
    ""Id"": ""$newId"",
    ""Name"": ""The Name Goes Here""
}" | ConvertFrom-Json)

$memberNameToAdd = "Nested"
$inner | Add-Member -MemberType NoteProperty -Name $memberNameToAdd $nested

$inner | ConvertTo-Json | Out-file "inner.json"
$outer | ConvertTo-Json | Out-file "outer.json"
我的具体挑战是动态添加的内部项的持久化方式。$inner的输出(发送到inner.json)与我期望的匹配:

{
    "Nested":  {
        "Id":  "741b6810-000e-4461-8ab8-6573e0d0b4a7",
        "Name":  "The Name Goes Here"
        }
}
不幸的是,$outer的输出序列化如下:

{
    "Child":  {
        "Grandchild":  {
            "Nested":  "@{Id=741b6810-000e-4461-8ab8-6573e0d0b4a7; Name=The Name Goes Here}"
         }
    }
}
显然,这会导致这样一种情况:当从文件(使用ConvertFrom Json)序列化回来时,我无法再访问“嵌套”的属性


我做错了什么,如何修复它?

很快,您的问题应该来自默认的
深度
类型:

$inner | ConvertTo-Json -Depth 6 | Out-file "inner.json"
$outer | ConvertTo-Json -Depth 6| Out-file "outer.json"

事实上,在默认情况下,在给您对象的
ToString()
值之后,它会停止对深度3的解析。

确实,我只需要添加一个深度参数。谢谢