2016-03-08 35 views
7

Ho un tipo FooObject e ho un file JSON che è stato serializzato da un'istanza FooObject. Ora voglio utilizzare ConvertFrom-Json per caricare il file JSON in memoria e nascondere l'output del comando a un oggetto FooObject e quindi utilizzare il nuovo oggetto in un cmdlet Set-Bar che accetta solo FooObject come tipo di parametro.Come caricare un file JSON e convertirlo in un oggetto di un tipo specifico?

Ma ho notato che il tipo di uscita di ConvertFrom-Json è PSCustomObject e non ho trovato alcun modo per convertire PSCustomObject in FooObject.

risposta

8

Prova a trasmettere l'oggetto personalizzato per FooObject:

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

Se questo non funziona, provare a costruire l'istanza FooObject con le proprietà dell'oggetto in ingresso (a condizione che la classe ha un costruttore del genere):

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

Se che anche non funziona è necessario creare un FooObject un'istanza vuota e aggiornare le sue proprietà in seguito:

$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

Poiché possiedo il codice di 'Set-Bar' (in C#). È possibile che accetti 'PSCustomObject' e lo converti in' FooObject' internamente? Quale sarà il modo migliore per il mio utente di cmdlet? – NonStatic

+0

Dovrebbe essere possibile se si cambia l'interfaccia per accettare 'PSCustomObject' o' Object'. Non ho molta familiarità con C#, però. –

+3

Si dovrebbe usare '' 'Get-Content -Raw 'C: \ path \ to \ your.json''' per caricare il contenuto di JSON – Laymain