加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

奇怪的使用newtonsoft json.net与powershell

发布时间:2020-12-16 19:52:44 所属栏目:百科 来源:网络整理
导读:我有 function Foo($a,$b){ $o = @{} $o.A = $a $o.B = $b $post = @{} $post.X="x" $post.entity =$o $newton::SerializeObject($post)} 然后做 foo "a" "b" 我明白了 Exception calling "SerializeObject" with "1" argument(s): "Self referencing loop d
我有
function Foo($a,$b)
{
    $o = @{}
    $o.A = $a
    $o.B = $b
    $post = @{}
    $post.X="x"
    $post.entity =$o
    $newton::SerializeObject($post)
}

然后做

foo "a" "b"

我明白了

Exception calling "SerializeObject" with "1" argument(s): "Self referencing loop detected for property 'Value' with type 'System.Management.Automation.PSParameterizedProperty'. Path 'entity.Members[0]'."

然而

function Foo2($o)
{
    $post = @{}
    $post.X="x"
    $post.entity =$o
    $newton::SerializeObject($post)
}

foo2 @{a="a"; b="b"}

工作良好.也

function foo3($a,$b)
{
   $o = @{}
   $o.A = $a
   $o.B = $b
   $newton::SerializeObject($o)
}

foo3 "a" "b"

工作,但

foo3 "a" 1

失败

后者可以通过这样做来工作

$o.B= [Int32]::Parse($b.Tostring())

这一切似乎都很奇怪

Windows 7上的powershell v2,json.net 4.4.5

自我引用循环问题完全是……分配事物的顺序.以下示例有效:
function Foo($a,$b)
{
    $o = @{}
    $post = @{}

    $post.entity =$o

    $o.A = $a
    $o.B = $b   

    $post.X="x"

    [Newtonsoft.Json.JsonConvert]::SerializeObject($post)
}

Foo "a" "b"

{"entity":{"A":"a","B":"b"},"X":"x"}

如果你在传递它之前转换类型,那么它将保持你的foo3函数通用:

function foo3($a,$b)
{
   $o = @{}
   $o.A = $a
   $o.B = $b
   [Newtonsoft.Json.JsonConvert]::SerializeObject($o)
}


$var2 = [Int32]::Parse((1).Tostring())

Foo3 "a" $var2

{"A":"a","B":1}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读