From 63c6e5116bd1b2d085b541235ece76e7aea2fa4c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 May 2026 22:40:49 +0000 Subject: [PATCH 1/2] Initial plan From 4d570f025fb0a76caa64c4abd89a83899e85acb4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 May 2026 23:28:57 +0000 Subject: [PATCH 2/2] Fix nullable DataContractSerializer cache lookup regression and add test Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/642c45d2-e603-4c5f-a2be-9a512be7b7a0 Co-authored-by: StephenMolloy <19562826+StephenMolloy@users.noreply.github.com> --- .../Runtime/Serialization/DataContract.cs | 2 +- .../tests/DataContractSerializer.cs | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs index 2be0f4bc9aca95..29f5bbf8e3249c 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs @@ -392,7 +392,7 @@ internal static int GetIdForInitialization(ClassDataContract classContract) int currentDataContractId = DataContractCriticalHelper.s_dataContractID; for (int i = 0; i < currentDataContractId; i++) { - if (ContractMatches(classContract, s_dataContractCache.GetItem(id))) + if (ContractMatches(classContract, s_dataContractCache.GetItem(i))) { return i; } diff --git a/src/libraries/System.Runtime.Serialization.Xml/tests/DataContractSerializer.cs b/src/libraries/System.Runtime.Serialization.Xml/tests/DataContractSerializer.cs index c78e842212dbdb..a03eb7db3339c7 100644 --- a/src/libraries/System.Runtime.Serialization.Xml/tests/DataContractSerializer.cs +++ b/src/libraries/System.Runtime.Serialization.Xml/tests/DataContractSerializer.cs @@ -1488,6 +1488,21 @@ public static void DCS_Nullables() Assert.Equal(item.Struct1.Value.B, actual.Struct1.Value.B); } + [Fact] + public static void DCS_NullableDataContractStructAsRoot() + { + NullableRootDataContractStruct? value = new NullableRootDataContractStruct(); + var serializer = new DataContractSerializer(typeof(NullableRootDataContractStruct?)); + + using var stream = new MemoryStream(); + serializer.WriteObject(stream, value); + + stream.Position = 0; + var roundTripped = (NullableRootDataContractStruct?)serializer.ReadObject(stream); + + Assert.True(roundTripped.HasValue); + } + [Fact] public static void DCS_SimpleStructWithProperties() { @@ -1545,6 +1560,11 @@ public static void DCS_PrivateTypeSerialization() } #region private type has to be in with in the class + [DataContract] + private struct NullableRootDataContractStruct + { + } + [DataContract] private class PrivateType {