我使用一些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)时无法再访问"嵌套"的属性。
我做错了什么,我该如何解决?
答案 0 :(得分:2)
您的问题应该来自默认的Key = Convert.ToBase64String(provider.Key);
类型:
depth
实际上默认情况下,它会在深度为3时停止解析,然后它会为您提供对象的$inner | ConvertTo-Json -Depth 6 | Out-file "inner.json"
$outer | ConvertTo-Json -Depth 6| Out-file "outer.json"
值。