From b232bfc63349de7bec52f55da5b6cc93898fcc42 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 May 2026 22:39:40 +0000 Subject: [PATCH 1/2] Initial plan From 5c38aaff57af2f3ab898479cf7a81fe90c00aadc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 May 2026 23:14:25 +0000 Subject: [PATCH 2/2] Optimize ReflectionXmlSerializationWriter array item iteration Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/bb7ee09b-36ff-43d7-9d23-45bdf352277f Co-authored-by: StephenMolloy <19562826+StephenMolloy@users.noreply.github.com> --- .../ReflectionXmlSerializationWriter.cs | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs index fba464fcbf582c..7f58c7a398e273 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs @@ -152,6 +152,22 @@ private void WriteArray(object o, object? choiceSource, ElementAccessor[] elemen private void WriteArrayItems(ElementAccessor[] elements, TextAccessor? text, ChoiceIdentifierAccessor? choice, object o, object? choiceSources) { + Array? choiceArray = choiceSources as Array; + + if (o is Array array) + { + IEnumerator e = array.GetEnumerator(); + int c = 0; + while (e.MoveNext()) + { + object ai = e.Current; + object? choiceSource = choiceArray?.GetValue(c++); + WriteElements(ai, choiceSource, elements, text, choice, true, true); + } + + return; + } + var arr = o as IList; if (arr != null) @@ -159,7 +175,7 @@ private void WriteArrayItems(ElementAccessor[] elements, TextAccessor? text, Cho for (int i = 0; i < arr.Count; i++) { object? ai = arr[i]; - var choiceSource = ((Array?)choiceSources)?.GetValue(i); + object? choiceSource = choiceArray?.GetValue(i); WriteElements(ai, choiceSource, elements, text, choice, true, true); } } @@ -175,7 +191,7 @@ private void WriteArrayItems(ElementAccessor[] elements, TextAccessor? text, Cho while (e.MoveNext()) { object ai = e.Current; - var choiceSource = ((Array?)choiceSources)?.GetValue(c++); + object? choiceSource = choiceArray?.GetValue(c++); WriteElements(ai, choiceSource, elements, text, choice, true, true); } }