Skip to content

Commit 2f0f889

Browse files
committed
Update PsObjectExtensions.cs
Fixes serialization bug
1 parent e073bb8 commit 2f0f889

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

src/ResourceManager/ResourceManager/Commands.ResourceManager/Cmdlets/Extensions/PsObjectExtensions.cs

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,36 @@ private static JToken ToJToken(object value)
9999
return obj;
100100
}
101101

102-
var valueAsArray = value as Array;
103-
if (valueAsArray != null)
102+
var valueAsDictionary = value as IDictionary;
103+
if (valueAsDictionary != null)
104104
{
105-
var retVal = new JToken[valueAsArray.Length];
106-
for (int i = 0; i < valueAsArray.Length; ++i)
105+
JObject obj = new JObject();
106+
var dictionaryEntries = valueAsDictionary is IDictionary<string, object>
107+
? valueAsDictionary.OfType<KeyValuePair<string, object>>().Select(kvp => Tuple.Create(kvp.Key, kvp.Value))
108+
: valueAsDictionary.OfType<DictionaryEntry>().Select(dictionaryEntry => Tuple.Create(dictionaryEntry.Key.ToString(), dictionaryEntry.Value));
109+
110+
dictionaryEntries = dictionaryEntries.Any(dictionaryEntry => dictionaryEntry.Item1.EqualsInsensitively(Constants.MicrosoftAzureResource))
111+
? dictionaryEntries.Where(dictionaryEntry => !PsObjectExtensions.PropertiesToRemove.ContainsKey(dictionaryEntry.Item1))
112+
: dictionaryEntries;
113+
114+
foreach (var dictionaryEntry in dictionaryEntries)
115+
{
116+
obj.Add(dictionaryEntry.Item1, PsObjectExtensions.ToJToken(dictionaryEntry.Item2));
117+
}
118+
119+
return obj;
120+
}
121+
122+
var valueAsIList = value as IList;
123+
if (valueAsIList != null)
124+
{
125+
var tmpList = new List<JToken>();
126+
foreach(var v in valueAsIList)
107127
{
108-
retVal[i] = PsObjectExtensions.ToJToken(valueAsArray.GetValue(i));
128+
tmpList.Add(PsObjectExtensions.ToJToken(v));
109129
}
110130

111-
return JArray.FromObject(retVal);
131+
return JArray.FromObject(tmpList.ToArray());
112132
}
113133

114134
return new JValue(value.ToString());

0 commit comments

Comments
 (0)