From 86bb4d613f3c1acbf1ea3ac46e83ea4dbb7054ea Mon Sep 17 00:00:00 2001 From: Gabriel Adrian Samfira Date: Thu, 20 Feb 2025 14:28:27 +0200 Subject: [PATCH 1/2] Pass non mapping to base serializer For PSObjects that are not dictionaries or PSCustomObjects, pass the object directly to the base serializer. Signed-off-by: Gabriel Adrian Samfira --- lib/net47/PowerShellYamlSerializer.dll | Bin 11264 -> 11264 bytes .../PowerShellYamlSerializer.dll | Bin 11264 -> 11264 bytes src/PowerShellYamlSerializer.cs | 4 ++++ 3 files changed, 4 insertions(+) diff --git a/lib/net47/PowerShellYamlSerializer.dll b/lib/net47/PowerShellYamlSerializer.dll index ad5b86b4c0c24532e97670041230195bbad8fc1a..904b86b00e0b08774bc96390fe9f1bb4886b27f3 100644 GIT binary patch delta 1735 zcmZ{kdu&s66vw~kcW-akt{dyBdsqf*H}+mx+pUjb!p2At71$yHCTQ$B1_n*pfPlfR z;F66$9I;-b;SnP-8WkbYMu-Vwh>3tf=`t`99AN=T2tFV&;gRS(_t$QWKl~-X&+mNC zIlsp}_jm8EHM`clwMV_|%=s$u=4?^Wn)qxLeWw#uno77(5X1nw^XrTCR z3uJqWDPRIBfm9Jd`lvgYY!|Z1 zt828+IPSxztKuqI>k4NE9co57Ou4GvWLIOxCRz2dDju5MlarHItXXwhR;-%!ugaDh z9^{kNfbxvm@4;`cCI_^=f^5kgOH#zkMFlP>Rf2HQT+2L11|QmX?6-JC05{38{>=N~s$Ar7|)%QVkAItA47(sTr9b{O~Xqr}?-l<-1s< zC4?8>@^zgmMgXU!N^cmz*dwvaQVqh2_qo8=GO89Iiy&@i)Bzk7A>7NTQ5+L|`MJo8 z%m$BIk`HoLiTK}m44-RRG#f8koHRivlzEt-OY{PY$#}S%R81Z_gn#HHPN9+fbcZ@D z3&=}D)Iu(@s7vTRol~BrVloQl;#tpAD@VJeXCp0TyO(W`wu9H|wDeOsQd)vKs6=}& z&J|j0I!28dSC07%Jt^(Qk`eNn|0RK?a0`KDlD(4KB+p9zC^;&5k?BD;PBI-h&2-`h zvkZSRYY|pF@MAS|0lJmA2W{wO@r(>S$85t|9A{dYQE5jrb`&R+LFq9nf1K?ot|=~h z0*94W$%y1`$q&g`2dWz%DW#Gvk}pYazyXY-GLJ?uiF_{65&DL%(4YFay^PE{Hwc*D7TWY^cU+?8YZFj7zi|H@V+W#`5o2^JXR1 zH7gfJ+J;JovtOHB{(-)^WZYC>Hs|*z+vn^PRZ-viP*b$0A+kOkjdXYU1EF9b(i8~= zf=!X0h}Rbm`n?TZzMyV*ZSn)Fe=7eHw5(n5$#!rrZ{aS#x%5%_H_dNE{=spOV+Zvk zuClzmmDd~YjAHq|vq!e${L?q|tFBGHjPqz`#>q?j*4;`iZu?^U%YU37dvJ@VPc>63 zTcrtC0o_f$<91Urx4chT5rq%y5keEcqaHLM!Ya&m1l{Q33lQK~kQw2O2-^WxhSkH} e%X7o5{cJUGwhzJN`O2^mMc$;n>NX`BwEqB78BB2i delta 1572 zcmY+EdrTZv6vn@EXLpw6RUXwsp|HC=7nWr=z%q*>V6hbqDNU<|7@M-oZdGEIO4~HW zxTP($u?WS98ZAjmT(I37)wu6eqdAIp25g zId|sH<52sd_LIj=KMhQOFglbgE;Nq5`y_SiL?z|}4ZwEYE?jyCm56DZewbd$KHUg; zJjxU>W1<+C$pT2X7u3eu#JotaAV2}qO?&g%7k#Qepg5|_fy9W5k)+LXttC>yadJY$ z&8LdZqR$MN>dtc})szsaWRt1iP%0bB53X|9j}#avlrxNCsZ*93Wpb_I?K4)+G^d+g zRr+>Qy~h$MWw)+qadGiRqQ#|JB2L!Vl-@FugXT6Nnl4kQHRmZIq%O!eH#?6wQqlKUjTl>AEavg8$}8%daAX5uqu4t``7;CE&@Y85xC@C5S#1eB;78xdjgxJ+zg zZp2eK$4q1fWgLvhL42qjk&dy~=Qs{xPO;N^yrVQpc1re3j+4;`CI`k9n`EQpF3H_E zh3hCvqgSwiG&)M}(MNQR=5=pILA_brHJ&~A`&&6uMV-|UrWFS;i@g>@DyzJ8`e;UG zzF9QMi77~i6Fbn4vvdqssUN@a_%rrt#+}5p?#}~vpFRHTri)`!tsR4H-|EvFt}AOT zYV2&@o1!%A>FV_Rx~e@Pk5;4k{b6s&=l2AITF4)&3Ut;616q|w(}MbLd$)J^YH$eD z+9vo)4)B=af8~t)3YRX8e}ViofD#_fjXZR-qabbKZFFud&eIP&l#46+;IIK=NofU9cR39wfsYcvF7UzhlW_}CLmFTG8p G9`!$V$~)Hp diff --git a/lib/netstandard2.1/PowerShellYamlSerializer.dll b/lib/netstandard2.1/PowerShellYamlSerializer.dll index f126f2cbbcf1bc281b34cbf0d60d6bb8c308559f..a2c4acf1c16433632c780a02c14ab3aa2b472584 100644 GIT binary patch delta 1662 zcmZ{ke{54#6vw~kzSq~abhBNBZ5CMDjjh|dvaYN@0Nrqs$**ig6ck8!D-5FIg8_*K zx3VnqBN4T}1QLiQ1Y;lsfiz$=2;m<=qXDv@BM#!Ck`RqTf(8sS&$}yQ{^3pT=brC5 z=l(kH=51THZP|M})zFH!j%44SOn+q$FQt!6qH5crW?+dK5MlF0s;2v9A7#o0TOixB zOaU8E4IC;3$UG5DrPTk%%8Jy{ z{PD9Yc~-61ssU=fQc_2y6O`T(_Vw}!oF(>6Q+Y@kKBi{WF^w?8l^o#178vzx7dngx z5A|(gE1zAR`58xwREII0oeuMWtufOxCZ%)qwAQ|(Go|+O3~L#$ZFJmXUDT_2wD1hi zxZ^&$U5KmX43~@#deyx0+KN<<&7&IDCI$6Ih=-ZMk&%(>&VsO3VAQZ4Qa07{Aa7O+ za$B|EiC@;|dbOu*nMzTG@0E}s4BG3M7s=uy+k+1r5fR5t#Ka^J63if4neU^Wc>&8s zho38f?WF^n#u>}T)LLF?!S}s-f31W zTY6R7EozXJ%38}$HP|PWmAQ^;ab!&OP#EXNWk&GzqgaNf<3}m?V6K)GQJm#>`mh*r zoR?~J!#D>16Z=7`emL8=3fm?aCAD@UM?&j5HoD%%%xyWFbnrN!je_GY+3ZMIW1BkywC zFVJjhKO?Er4EqBTn1`ScSR}boa*O0wlHW>Rmb}7@U;@rCy*SVG;Rdq;e=zHiP$G!o zdFCv1DwzmcVX#;r1J5yAu^cCvPG(x#>AaoB=SsiySd~A?b{fM|rN*m_!k9&=Zq!tFmcG`sbvF@H~gp{se?&~fv0U~_%mx$nEY z(^_c$r?*$Nr&qmpF4sNs4NrgAZkQ{BJ{ruu5u8K0qRMWiJ&i`JK@v?|<1REnXO&`G x$7*!)2aIzp!PGfJXFJZyvbwlOd2WhzjI9RFZbTw?u{tHh-G-bebc?bL+P~WDO!xo* delta 1520 zcmY+EeN05(vf)_v@ac)MB6@q`{VwXzh{}zfjX$*9ZFWL_705wu=rsH^xZ*WmV-F-5C|*PW>76Jga0z z>ABbJ&@@Zq1N|Z!w`AsLYA_tsmMw)etlhB`Ci}&M=y!mJ%!qva?bMaN*03l-4)2qm z%Q3g181}UC8~Vitgwl#T3MYnmGgs@1sSHP@I)@$RtyGT6Qav}3|D!r8+}J3UzCv-5 z+;~z-eQKO4(UnmH}22QjIw=k-Uxd_()Z$2oZAuEz{RZDVAxGod8;PQ>Qu1_gCm~a*)N)LjTZ$@-!8YzBLZ6>ZWGS_DCmAZ5$^! z_N)8J&2t8*1eeuudWP)ku_SLvtMLp4(w5b9jvkZoX2}QzO#hNV8|*@$UGfFVeUjfv z&P!gD{GRDWHojoyVvbpepO`NE%B(`2;zcdCF&{;blJsH|cC*+b6Wf@Z@GMfyEM`>3 z(R3Wer^;dJ=zE>wIErhEgC53vO0#4{a!~Re()+;R#3{ut*(BK`xf4@ZLaCKr#T{5_ zh(4sxdE0Ml{&lWaqp<11(l$2vjktMaktJolNlm>}d_q*jeSMK|urJ_?`9gJ}a5(Od z1;f5*G!zTRYI`H~(cVz4FBFPu&5m7pK+^WdXQ1{D!K)7PHN$7&jCR(MXLL6KZf(io zvd-CTZ(iCmw|ON0gYnmA$A>hlb8mIp45(>SZ?yB<-?G0vaoT*L)i`>9%kPd!?PF&l z4W;It&7@gfovECX7nQAX_|S(4!U*y`z$(U9h!3U^dtt=kXD7&!kKap_-5AF)e%ZZT cRnJZ@d$qDAglKA^JS@btFJ-H^MH4>tKT}RKxBvhE diff --git a/src/PowerShellYamlSerializer.cs b/src/PowerShellYamlSerializer.cs index 09b0616..dbb4fb2 100644 --- a/src/PowerShellYamlSerializer.cs +++ b/src/PowerShellYamlSerializer.cs @@ -124,6 +124,10 @@ 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())) { + serializer(psObj.BaseObject, psObj.BaseObject.GetType()); + return; + } var mappingStyle = this.useFlowStyle ? MappingStyle.Flow : MappingStyle.Block; emitter.Emit(new MappingStart(AnchorName.Empty, TagName.Empty, true, mappingStyle)); foreach (var prop in psObj.Properties) { From 680b72684940a046e892abd3d5a7dad8dcdb2fe1 Mon Sep 17 00:00:00 2001 From: Gabriel Adrian Samfira Date: Thu, 20 Feb 2025 14:36:53 +0200 Subject: [PATCH 2/2] Add test case Signed-off-by: Gabriel Adrian Samfira --- Tests/powershell-yaml.Tests.ps1 | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Tests/powershell-yaml.Tests.ps1 b/Tests/powershell-yaml.Tests.ps1 index 59e9cde..1dc1d74 100644 --- a/Tests/powershell-yaml.Tests.ps1 +++ b/Tests/powershell-yaml.Tests.ps1 @@ -1,4 +1,4 @@ -# Copyright 2016-2024 Cloudbase Solutions Srl +# Copyright 2016-2024 Cloudbase Solutions Srl # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain @@ -190,6 +190,22 @@ children: } Describe "Test PSCustomObject wrapped values are serialized correctly" { + Context "A PSCustomObject that contains an array of PSObjects" { + It "Should serialize correctly" { + $expected = @" +yamlList: +- item1 +- item2 + +"@ + $data = ConvertFrom-YAml "yamlList: []" | ConvertTo-JSON -Depth 3 | ConvertFrom-Json + $jsData = '["item1", "item2"]' + $data.yamlList = $jsData | ConvertFrom-Json + + $asYaml = ConvertTo-Yaml $data + Assert-Equivalent -Options $compareStrictly -Expected $expected -Actual $asYaml + } + } Context "A PSCustomObject containing nested PSCustomObjects" { It "Should serialize correctly" { $expectBigInt = [System.Numerics.BigInteger]::Parse("9999999999999999999999999999999999999999999999999")