我正在使用函数来序列化和反序列化Powershell 2.0中的对象PowerShell 2.0 ConvertFrom-Json and ConvertTo-Json implementation
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
如何解决此错误?
P.S。 我提前道歉。什么无法在原始问题上添加评论...
答案 0 :(得分:2)
代码中有两个问题:
ConvertFrom-Json20
返回两个字典。这本身并不重要,但是:return
语句通过PSObject
包装返回的对象。结果$o
包含两个PSObject
的数组,而JSON序列化程序无法正常使用它们。要防止收集枚举,您可以使用一元逗号运算符。此运算符使用单个元素创建数组,并且将枚举数组而不是集合。而且,由于即使没有return
语句,PowerShell也会返回输出,您可以将其删除。