如何为PowerShell类属性指定JSON变量名?

时间:2019-04-22 21:43:43

标签: json powershell

我有一个示例PowerShell脚本,该脚本定义了带有一些属性的类“ Archive”:

class Archive {
    [String]$Address #JSON: archive
    [Int]$Port #JSON: port
    [String]$SiteKey #JSON site-key

    Archive() {
        $this.Address = "127.0.0.1"
        $this.Port = 80
    }
}

$a = [Archive]::new()

$json = $a | ConvertTo-Json

$json

我正在尝试创建一个简单的脚本,该脚本需要一些值并将其输出为JSON。首先,我忽略了PowerShell中的命名约定以匹配名称。然后,我添加了带有连字符的属性名称(这不是变量命名要求的一部分)。

从C#的角度来看,我将使用[DataMember(Name = "api-name")]属性来提示使用API​​的JSON负载时要使用的名称。

是否可以为PowerShell属性提供命名提示,以便将对象传递给ConvertTo-Json时,它将使用提示而不是脚本中属性的实际名称?

编辑

  1. 允许使用下划线。连字符不是。需要支持类似$field-name
  2. 的东西

1 个答案:

答案 0 :(得分:0)

您可以通过用大括号括住名称来指定variable names that include special characters

例如,您可以使用:

class Archive {
    [String]$address
    [Int]$port
    [String]${site_key} # variable / property name with special characters

    Archive() {
        $this.address = "127.0.0.1"
        $this.port = 80
        $this.{site_key} = "site key"
    }
}

$a = [Archive]::new()

$json = $a | ConvertTo-Json

$json

哪个应该给您这个JSON输出:

{
    "address":  "127.0.0.1",
    "port":  80,
    "site_key":  "site key"
}

执行ConvertTo-Json时,它仍将使用名称,但是通过这种方式,您可以将变量名写为任何东西。

不幸的是,它似乎不适用于类名。