gpt4 book ai didi

json - PowerShell 2.0 ConvertFrom-Json 和 ConvertTo-Json 实现异常 "A circular reference was detected"

转载 作者:行者123 更新时间:2023-12-04 22:11:20 32 4
gpt4 key购买 nike

我正在使用问题 PowerShell 2.0 ConvertFrom-Json and ConvertTo-Json implementation 中的函数对 Powershell 2.0 中的对象进行序列化和反序列化

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)
}

function ConvertFrom-Json20([object] $item){
add-type -assembly system.web.extensions
$ps_js=new-object system.web.script.serialization.javascriptSerializer
return $ps_js.DeserializeObject($item)
}

但是当我运行示例时:

$json = "[{'a':'b'},{'c':'d'}]"
$o = ConvertFrom-Json20 $json
$newJson = ConvertTo-Json20 $o

我有错误:

Exception calling "Serialize" with "1" argument(s): "A circular reference was detected while serializing an object of t
ype 'System.Management.Automation.PSParameterizedProperty'."
At line:4 char:28
+ return $ps_js.Serialize <<<< ($item)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException

我该如何解决这个错误?

附言我提前道歉。什么没能对原问题加评论...

最佳答案

代码有两个问题:

  1. PowerShell 枚举集合,因此 ConvertFrom-Json20 不是一个数组,而是返回两个字典。它本身没什么大不了的,但是:
  2. PowerShell v2 中的
  3. return 语句通过 PSObject 包装返回的对象。结果 $o 包含带有两个 PSObject 的数组,JSON 序列化程序无法正确处理它们。

要防止集合枚举,您可以使用一元逗号运算符。此运算符创建具有单个元素的数组,数组将被枚举而不是集合。由于 PowerShell 即使没有 return 语句也会返回输出,因此您可以将其删除。

关于json - PowerShell 2.0 ConvertFrom-Json 和 ConvertTo-Json 实现异常 "A circular reference was detected",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34896810/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com