2016-03-08 96 views
7

我有一個FooObject類型,我有一個從FooObject實例序列化的JSON文件。現在我想使用ConvertFrom-Json將JSON文件加載到內存中,並將命令的輸出轉換爲FooObject對象,然後在僅接受FooObject作爲參數類型的cmdlet Set-Bar中使用新對象。如何加載JSON文件並將其轉換爲特定類型的對象?

但我注意到輸出類型ConvertFrom-JsonPSCustomObject,我沒有找到任何方法將PSCustomObject轉換爲FooObject

回答

8

嘗試鑄造自定義對象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 
+0

因爲我擁有'Set-Bar'的代碼(在C#中)。是否有可能我接受'PSCustomObject'並在內部將它轉換爲'FooObject'?對於我的cmdlet用戶來說,哪種方法會更好? – NonStatic

+0

如果將接口更改爲接受「PSCustomObject」或「Object」,應該可以。不過,我並不太熟悉C#。 –

+3

你應該使用'''Get-Content -Raw'C:\ path \ to \ your.json''''來加載你的json內容 – Laymain