问题 如何加载JSON文件并将其转换为特定类型的对象?


我有一个类型 FooObject 我有一个从a序列化的JSON文件 FooObject 实例。现在我想用 ConvertFrom-Json 将JSON文件加载到内存并将命令的输出转换为 FooObject 对象,然后在cmdlet中使用新对象 Set-Bar 只接受 FooObject 作为参数类型。

但我注意到了输出类型 ConvertFrom-Json 是 PSCustomObject 我没有找到任何转换方式 PSCustomObject 至 FooObject


8700
2018-03-08 09:05


起源



答案:


尝试将自定义对象强制转换为 FooObject

$foo = [FooObject](Get-Content 'C:\path\to\your.json' | Out-String | ConvertFrom-Json)

如果这不起作用,尝试构建 FooObject 具有输入对象属性的实例(假设类具有类似的构造函数):

$json = Get-Content 'C:\path\to\your.json' | Out-String | ConvertFrom-Json
$foo = New-Object FooObject ($json.Foo, $json.Bar, $json.Baz)

如果这也不起作用,则需要创建一个空的 FooObject 实例并在之后更新其属性:

$json = Get-Content 'C:\path\to\your.json' | Out-String | ConvertFrom-Json
$foo = New-Object FooObject
$foo.AA = $json.Foo
$foo.BB = $json.Bar
$foo.CC = $json.Baz

13
2018-03-08 09:38



因为我拥有的代码 Set-Bar (在C#中)。我有可能让它接受 PSCustomObject 并将其转换为 FooObject 内部?这对我的cmdlet用户来说是更好的方法吗? - NonStatic
如果您将接口更改为接受,则应该可以 PSCustomObject 要么 Object。不过,我对C#不太熟悉。 - Ansgar Wiechers
你应该使用 Get-Content -Raw 'C:\path\to\your.json' 加载你的json内容 - Laymain


答案:


尝试将自定义对象强制转换为 FooObject

$foo = [FooObject](Get-Content 'C:\path\to\your.json' | Out-String | ConvertFrom-Json)

如果这不起作用,尝试构建 FooObject 具有输入对象属性的实例(假设类具有类似的构造函数):

$json = Get-Content 'C:\path\to\your.json' | Out-String | ConvertFrom-Json
$foo = New-Object FooObject ($json.Foo, $json.Bar, $json.Baz)

如果这也不起作用,则需要创建一个空的 FooObject 实例并在之后更新其属性:

$json = Get-Content 'C:\path\to\your.json' | Out-String | ConvertFrom-Json
$foo = New-Object FooObject
$foo.AA = $json.Foo
$foo.BB = $json.Bar
$foo.CC = $json.Baz

13
2018-03-08 09:38



因为我拥有的代码 Set-Bar (在C#中)。我有可能让它接受 PSCustomObject 并将其转换为 FooObject 内部?这对我的cmdlet用户来说是更好的方法吗? - NonStatic
如果您将接口更改为接受,则应该可以 PSCustomObject 要么 Object。不过,我对C#不太熟悉。 - Ansgar Wiechers
你应该使用 Get-Content -Raw 'C:\path\to\your.json' 加载你的json内容 - Laymain


从这里 : https://blogs.technet.microsoft.com/heyscriptingguy/2014/04/23/powertip-convert-json-file-to-powershell-object/

我发现以下作品很棒:

Get-Content -Raw -Path <jsonFile>.json | ConvertFrom-Json

1
2018-05-29 13:26