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 {