Skip to content

Commit ff6fce6

Browse files
Merge pull request #169 from gabriel-samfira/fix-nested-pscustomobjects
Fix nested PSCustomObjects in hashtables
2 parents f0da96d + 6270cab commit ff6fce6

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-1
lines changed

Tests/powershell-yaml.Tests.ps1

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,9 +725,17 @@ int64: 9223372036854775807
725725
$nestedPsO = [PSCustomObject]@{
726726
Nested = 'NestedValue'
727727
}
728+
$nestedHashTable = @{
729+
"aKey" = $nestedPsO
730+
}
731+
$nestedArray = @(
732+
$nestedPsO
733+
)
728734
$PsO = [PSCustomObject]@{
729735
Name = 'Value'
730736
Nested = $nestedPsO
737+
NestedHashTable = $nestedHashTable
738+
NestedArray = $nestedArray
731739
NullValue = $null
732740
}
733741

@@ -746,6 +754,16 @@ int64: 9223372036854775807
746754
$ret["PsO"]["Name"] = "Value"
747755
$ret["PsO"]["Nested"] = [System.Collections.Specialized.OrderedDictionary]::new()
748756
$ret["PsO"]["Nested"]["Nested"] = "NestedValue"
757+
$ret["PsO"]["NestedHashTable"] = [ordered]@{
758+
"aKey" = [ordered]@{
759+
"Nested" = "NestedValue"
760+
}
761+
}
762+
$ret["PsO"]["NestedArray"] = @(
763+
[ordered]@{
764+
"Nested" = "NestedValue"
765+
}
766+
)
749767
$ret["PsO"]["NullValue"] = $null
750768
$ret["Ok"] = "aye"
751769
Assert-Equivalent -Options $compareStrictly -Expected $ret -Actual $result
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

src/PowerShellYamlSerializer.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,15 @@ public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerialize
8484
continue;
8585
}
8686
serializer(entry.Key, entry.Key.GetType());
87+
var objType = entry.Value.GetType();
88+
var val = entry.Value;
8789
if (entry.Value is PSObject nestedObj) {
88-
serializer(nestedObj.BaseObject, nestedObj.BaseObject.GetType());
90+
var nestedType = nestedObj.BaseObject.GetType();
91+
if (nestedType != typeof(System.Management.Automation.PSCustomObject)) {
92+
objType = nestedObj.BaseObject.GetType();
93+
val = nestedObj.BaseObject;
94+
}
95+
serializer(val, objType);
8996
} else {
9097
serializer(entry.Value, entry.Value.GetType());
9198
}

0 commit comments

Comments
 (0)