首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有javascriptSerializer的Powershell2.0中的Json循环引用

带有javascriptSerializer的Powershell2.0中的Json循环引用
EN

Stack Overflow用户
提问于 2016-08-26 16:29:23
回答 1查看 839关注 0票数 7

我正在用Powershell2.0编写脚本,现在不可能升级到3.0或更高版本。在此脚本中,我尝试使用此链接中的代码(PowerShell 2.0 ConvertFrom-Json and ConvertTo-Json implementation)将一些数据序列化为JSON:

代码语言:javascript
复制
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)
}

我的问题是我得到了一个循环引用,我真的不知道为什么。我设置了一小段测试数据,powershell中的结构如下所示:

代码语言:javascript
复制
$testRoot = @{
    "id" = "1"
    "children" = @( 
        @{
            "id" = "2"
            "children" = @( 
                @{
                    "id" = "2";
                };
                @{
                    "id" = "3";
                }
            );
        };
        @{
            "id" = "4"
            "children" = @( 
                @{
                    "id" = "5";
                }
            );
        }
    )
}

我知道它看起来很垃圾,但我只需要它的这种格式。

我需要序列化的结构有更多的层,所以甚至有更多的“孩子”,这就是它变得奇怪的地方。

当我尝试这样做时:

代码语言:javascript
复制
ConvertTo-Json20 $testRoot

一切都很好。该结构的解析方式如下:

代码语言:javascript
复制
{
   "id":"1",
   "children":[
        {
            "id":"2",
            "children":[
               {
                   "id":"2"
               },
               {
                   "id":"3"
               }
            ]
        },
        {
            "id":"4",
            "children":[
               {
                   "id":"5"
               }
            ]
        }
   ]
}

但现在问题来了。正如前面提到的,这个结构有更多的层,所以我尝试这样做,它只是在一个数组中设置数据。

代码语言:javascript
复制
ConvertTo-Json20 @($testRoot)

但是它不起作用,我只是收到一条错误消息,说:

代码语言:javascript
复制
Exception in method "Serialize" with 1 argument(s):  
"While serializing an object of type "System.Management.Automation.PSParameterizedProperty" a circular reference was discovered."
At C:\Users\a38732\Desktop\Temp.ps1:34 symbol:28
+     return $ps_js.Serialize <<<< ($item)
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException

(我将错误消息从德语翻译过来,因此在英语版本中可能会有一些不同的单词...)

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39161783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档