2016-03-08 13 views
7

タイプFooObjectがあり、FooObjectインスタンスからシリアル化されたJSONファイルがあります。今度はConvertFrom-Jsonを使用してJSONファイルをメモリにロードし、コマンドの出力をFooObjectオブジェクトに変換してから、FooObjectをパラメータタイプとして受け入れるコマンドレットSet-Barで新しいオブジェクトを使用します。JSONファイルをロードして特定のタイプのオブジェクトに変換する方法は?

出力タイプがConvertFrom-Jsonであることがわかりました。PSCustomObjectFooObjectに変換する方法が見つかりませんでした。

答えて

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'に変換することは可能でしょうか?これは、私のコマンドレットユーザーのためのより良い方法ですか? – NonStatic

+0

'PSCustomObject'または' Object'を受け入れるようにインターフェースを変更すると可能です。私はあまりにもC#に精通していない。 –

+3

jsonのコンテンツを読み込むには '' Get-Content -Raw 'C:\ path \ to \ your.json''''を使うべきです – Laymain

関連する問題