我有一个JSON配置文件:
{
"name": "foo",
"bar": {
"name": "bar"
}
}我想读取这个JSON文件并将其映射到具体类型:
class Bar {
[string] $name
Bar([string] $name) {
$this.name = $name
}
}
class Foo {
[string] $name
[Bar] $bar
Foo([string] $name, [Bar] $bar) {
$this.name = $name
$this.bar = $bar
}
}
$obj = Get-Content "$PSScriptRoot\my.json" | ConvertFrom-Json
$foo = [Foo] $obj
$foo铸造不起作用。正确的方法是什么?我正在研究PS 5.1。
发布于 2021-04-28 20:51:19
在JSON5.1中,我们可以通过直接调用PowerShell序列化程序来辅助ConvertFrom-Json:
# Import the utility module, ensure dependencies loaded, we're gonna use the same serializer as ConvertFrom-Json uses
Import-Module Microsoft.PowerShell.Utility
$null = Get-Command ConvertFrom-Json
$serializer = [System.Web.Script.Serialization.JavaScriptSerializer]::new()
# Deserialize json to specific target type
$json = Get-Content "$PSScriptRoot\my.json" -Raw
$serializer.Deserialize($json, [Foo])注意事项:只有当对象层次结构中的所有自定义类型都具有无参数构造函数时才能工作,因此您必须稍微重构类定义:
class Bar {
[string] $name
Bar([string] $name) {
$this.name = $name
}
# Empty ctor for de-serialization
Bar() {}
}
class Foo {
[string] $name
[Bar] $bar
Foo([string] $name, [Bar] $bar) {
$this.name = $name
$this.bar = $bar
}
# Empty ctor for de-serialization
Foo() {}
}https://stackoverflow.com/questions/67307309
复制相似问题