From 94508ce13e60645e55866c5bcbb29865784bee5d Mon Sep 17 00:00:00 2001 From: Gabriel Adrian Samfira Date: Sat, 27 Dec 2025 14:42:04 +0200 Subject: [PATCH 1/3] Slight cleanup Signed-off-by: Gabriel Adrian Samfira --- .../PowerShellYamlSerializer.dll | Bin 11264 -> 11264 bytes powershell-yaml.psm1 | 37 ++++++++--------- src/PowerShellYamlSerializer.cs | 38 ++++++++++-------- 3 files changed, 40 insertions(+), 35 deletions(-) diff --git a/lib/netstandard2.0/PowerShellYamlSerializer.dll b/lib/netstandard2.0/PowerShellYamlSerializer.dll index a27bb445ebc7a6cc3a16dc9f13deeaac501347fb..1c5ebd446ae4c451d92e68b5ac51e69163340104 100644 GIT binary patch delta 2658 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 new NullValueGraphVisitor(args.InnerVisitor)); } - if (useFlowStyle == true) { + if (useFlowStyle) { builder = builder.WithEventEmitter(next => new FlowStyleAllEmitter(next)); } - if (useSequenceFlowStyle == true) { + if (useSequenceFlowStyle) { builder = builder.WithEventEmitter(next => new FlowStyleSequenceEmitter(next)); } From 6d58b7c5ece93c5dbea10b138ae6b8136d579291 Mon Sep 17 00:00:00 2001 From: Gabriel Adrian Samfira Date: Sat, 27 Dec 2025 14:48:01 +0200 Subject: [PATCH 2/3] Add helper function Signed-off-by: Gabriel Adrian Samfira --- .../PowerShellYamlSerializer.dll | Bin 11264 -> 11264 bytes src/PowerShellYamlSerializer.cs | 55 +++++++++--------- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/lib/netstandard2.0/PowerShellYamlSerializer.dll b/lib/netstandard2.0/PowerShellYamlSerializer.dll index 1c5ebd446ae4c451d92e68b5ac51e69163340104..9c0c9d5665955eccb393eedf90355f8a2ad98588 100644 GIT binary patch delta 4437 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 bCQ1_gi(}>RZ>P6P`F3nL9Q{}f#q56r%xT(D delta 4491 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 RRlAg@8^%J>Gh(>G{0}Wy+4}$h diff --git a/src/PowerShellYamlSerializer.cs b/src/PowerShellYamlSerializer.cs index f3d73c2..b0f9433 100644 --- a/src/PowerShellYamlSerializer.cs +++ b/src/PowerShellYamlSerializer.cs @@ -33,6 +33,26 @@ public override bool EnterMapping(IObjectDescriptor key, IObjectDescriptor value } } +internal static class PSObjectHelper { + /// + /// Unwraps a PSObject to its BaseObject if the BaseObject is not a PSCustomObject. + /// + /// The object to potentially unwrap + /// The type of the unwrapped object + /// The unwrapped object if it was a PSObject wrapping a non-PSCustomObject, otherwise the original object + public static object UnwrapIfNeeded(object obj, out Type unwrappedType) { + if (obj is PSObject psObj && psObj.BaseObject != null) { + var baseType = psObj.BaseObject.GetType(); + if (baseType != typeof(System.Management.Automation.PSCustomObject)) { + unwrappedType = baseType; + return psObj.BaseObject; + } + } + unwrappedType = obj?.GetType(); + return obj; + } +} + public class BigIntegerTypeConverter : IYamlTypeConverter { public bool Accepts(Type type) { return typeof(BigInteger).IsAssignableFrom(type); @@ -84,20 +104,8 @@ public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerialize continue; } serializer(entry.Key, entry.Key.GetType()); - var objType = entry.Value.GetType(); - var val = entry.Value; - if (entry.Value is PSObject nestedObj) { - if (nestedObj.BaseObject != null) { - var nestedType = nestedObj.BaseObject.GetType(); - if (nestedType != typeof(System.Management.Automation.PSCustomObject)) { - objType = nestedObj.BaseObject.GetType(); - val = nestedObj.BaseObject; - } - } - serializer(val, objType); - } else { - serializer(entry.Value, entry.Value.GetType()); - } + var unwrapped = PSObjectHelper.UnwrapIfNeeded(entry.Value, out var unwrappedType); + serializer(unwrapped, unwrappedType); } emitter.Emit(new MappingEnd()); } @@ -126,7 +134,9 @@ public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeseria public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerializer serializer) { var psObj = (PSObject)value; - if (!typeof(IDictionary).IsAssignableFrom(psObj.BaseObject.GetType()) && !typeof(PSCustomObject).IsAssignableFrom(psObj.BaseObject.GetType())) { + if (psObj.BaseObject != null && + !typeof(IDictionary).IsAssignableFrom(psObj.BaseObject.GetType()) && + !typeof(PSCustomObject).IsAssignableFrom(psObj.BaseObject.GetType())) { serializer(psObj.BaseObject, psObj.BaseObject.GetType()); return; } @@ -141,19 +151,8 @@ public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerialize emitter.Emit(new Scalar(AnchorName.Empty, "tag:yaml.org,2002:null", "", ScalarStyle.Plain, true, false)); } else { serializer(prop.Name, prop.Name.GetType()); - var objType = prop.Value.GetType(); - var val = prop.Value; - if (prop.Value is PSObject nestedPsObj) { - if (nestedPsObj.BaseObject != null) { - var nestedType = nestedPsObj.BaseObject.GetType(); - if (nestedType != typeof(System.Management.Automation.PSCustomObject)) { - objType = nestedPsObj.BaseObject.GetType(); - val = nestedPsObj.BaseObject; - } - } - } - serializer(val, objType); - + var unwrapped = PSObjectHelper.UnwrapIfNeeded(prop.Value, out var unwrappedType); + serializer(unwrapped, unwrappedType); } } emitter.Emit(new MappingEnd()); From dc20c757f0282f23e011cf6525a2660213107018 Mon Sep 17 00:00:00 2001 From: Gabriel Adrian Samfira Date: Mon, 29 Dec 2025 12:10:19 +0200 Subject: [PATCH 3/3] Handle ordered types better Signed-off-by: Gabriel Adrian Samfira --- .../PowerShellYamlSerializer.dll | Bin 11264 -> 11264 bytes powershell-yaml.psm1 | 46 +++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/lib/netstandard2.0/PowerShellYamlSerializer.dll b/lib/netstandard2.0/PowerShellYamlSerializer.dll index 9c0c9d5665955eccb393eedf90355f8a2ad98588..25b37f7bb7293f6c44dde2035ebf7b80a2c97073 100644 GIT binary patch delta 235 zcmZpOXo#55!Sei-%$topcVq;(Z}Q#UU}fmq{qt&3RqGO`%@wls%o?dCMk#5A$%&RG z=4s|h$rgsjsg~x6W|o%bNvX-E2B{`ysi`I@sY#RN6?0icrfr%%d4ghqK$$%9VUNJEKz_8X21kNs`CnLI)2TLm>ab5mjC7!r9UkGsSG9zMhqzoX$*!8 z$qb1MmO#EakY~=21ms%)MU5F!fuiO>IWr&)VkH4Zk{L`H41lx=P&5@xrvS;M&F9q( FSpZ?OM|=PP delta 235 zcmZpOXo#55!LoyU!rzTOcVq62BqK`;GgEU5lcdyC)0D~bin%Pd=9%**Pf!dHV7SR2I8(96 zY1@P?B7aqsEGK_ZEKz_8E;54(0#(ahH&m+3o_ybIn}-GO<`$(tEdG`ZCJd$w1`HMq z$qcCsh786)(hSHq1B<5uWF-N~Bp@_mump>mGMEEt6QD>c5SlWiY(B4U G$N~U>6GC + if ($genericName -eq 'System.Collections.Generic.OrderedDictionary`2') { + return Convert-GenericOrderedDictionaryToOrderedDictionary $data + } + + # Handle System.Collections.Generic.SortedDictionary + if ($genericName -eq 'System.Collections.Generic.SortedDictionary`2') { + return Convert-GenericOrderedDictionaryToOrderedDictionary $data + } + } + + # Generic IDictionary handling (for Hashtable, Dictionary, etc.) + if (([System.Collections.IDictionary].IsAssignableFrom($dataType))) { return Convert-HashtableToDictionary $data - } elseif (([System.Collections.IList].IsAssignableFrom($dataType))) { + } + + if (([System.Collections.IList].IsAssignableFrom($dataType))) { return Convert-ListToGenericList $data } + return $data }