gpt4 book ai didi

powershell - 类成员被 json 序列化为空字符串而不是 null

转载 作者:行者123 更新时间:2023-12-02 23:00:07 25 4
gpt4 key购买 nike

我在 powershell 脚本中使用 class 关键字。

我想序列化自定义类的实例,但我观察到 $null 成员被序列化为 "" 而不是 null

复制:

Class foo{
[string]$X
}

[foo]@{ x = $null } | ConvertTo-Json

$foo = New-Object foo
$foo.X = $null

$foo | ConvertTo-Json

输出:

{
"X": ""
}
{
"X": ""
}

但我期待:

{
"X": null
}
{
"X": null
}

作为旁注,这是可行的:

@{ X = $null } | ConvertTo-Json

它输出预期的:

{
"X": null
}

有办法解决这个问题吗?

PS:如果重要,$PSVersionTable 输出:

Name                           Value                                                                                                                                                                     
---- -----
PSVersion 5.1.19041.546
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.19041.546
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1

最佳答案

Is there a way to fix this ?

没有

( a workaround exists 取决于您对输入的控制级别,但无法将 $null 直接分配给 [string] 类型的 PowerShell类属性)

PowerShell 类中的运行时类型强制执行不依赖于 .NET 的隐式类型转换规则 - 这被卸载到 PowerShell 现有的语言基础设施和在那里找到的转换逻辑,以及 [string]< 的默认类型转换器 总是 返回一个实例,从不为空。

您可以在键入变量时观察到相同的行为:

Remove-Variable X -Force

# Let's assign $null to a variable with no type constraints
$X = $null
# True - we can assign $null to a variable without type constraints just fine
$null -eq $X

# Let's apply a type constraint and assign `$null` again
[string]$X = $null
# False - actual value assigned after type constraint applied is not $null anymore
$null -eq $X
# True - PowerShell has converted $null to ''
'' -eq $X

所以如果你想让 $X 保留 $null

关于powershell - 类成员被 json 序列化为空字符串而不是 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64464834/

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