Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit ef2db56

Browse files
committed
Merge pull request #2085 from khdang/fix_genericqueue_serialization
Fix serialization of generic queue to align with NetNative
2 parents 9b9e9e6 + d403eef commit ef2db56

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,8 +1064,7 @@ private void ImportDataMembers()
10641064

10651065
private static bool CanSerializeMember(FieldInfo field)
10661066
{
1067-
return field != null &&
1068-
field.FieldType != Globals.TypeOfObject; // Don't really know how to serialize plain System.Object instance
1067+
return field != null;
10691068
}
10701069

10711070
private bool SetIfGetOnlyCollection(DataMember memberContract)

src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.cs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -562,29 +562,31 @@ public static void DCS_CollectionGenericMembers()
562562
Assert.True(y.RO1.Count == 1, getCheckFailureMsg("RO1"));
563563
Assert.True(y.RO2.Count == 1, getCheckFailureMsg("RO2"));
564564

565-
566-
567-
568565
foreach (var item in x.F1)
569566
{
570567
Assert.True(y.F1.Contains(item), getCheckFailureMsg("F1"));
571568
}
569+
572570
foreach (var item in x.F2)
573571
{
574572
Assert.True(y.F2.Contains(item), getCheckFailureMsg("F2"));
575573
}
574+
576575
foreach (var item in x.P1)
577576
{
578577
Assert.True(y.P1.Contains(item), getCheckFailureMsg("P1"));
579578
}
579+
580580
foreach (var item in x.P2)
581581
{
582582
Assert.True(y.P2.Contains(item), getCheckFailureMsg("P2"));
583583
}
584+
584585
foreach (var item in x.RO1)
585586
{
586587
Assert.True(y.RO1.Contains(item), getCheckFailureMsg("RO1"));
587588
}
589+
588590
foreach (var item in x.RO2)
589591
{
590592
Assert.True(y.RO2.Contains(item), getCheckFailureMsg("RO2"));
@@ -1171,7 +1173,6 @@ public static void DCS_SerializeClassThatImplementsInteface()
11711173
ClassImplementsInterface value = new ClassImplementsInterface() { ClassID = "ClassID", DisplayName = "DisplayName", Id = "Id", IsLoaded = true };
11721174
var actual = SerializeAndDeserialize<ClassImplementsInterface>(value, "<ClassImplementsInterface xmlns=\"http://schemas.datacontract.org/2004/07/SerializationTypes\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><DisplayName>DisplayName</DisplayName><Id>Id</Id></ClassImplementsInterface>");
11731175

1174-
11751176
Assert.StrictEqual(value.DisplayName, actual.DisplayName);
11761177
Assert.StrictEqual(value.Id, actual.Id);
11771178
}
@@ -1246,6 +1247,7 @@ public int GetPrivatePropertyValue()
12461247
return PrivateProperty;
12471248
}
12481249
}
1250+
12491251
#endregion
12501252

12511253
[Fact]
@@ -1441,13 +1443,30 @@ private static void DCS_Tuple8()
14411443

14421444
[Fact]
14431445
public static void DCS_GenericQueue()
1446+
{
1447+
var expectedFormat = @"<QueueOfint xmlns=""http://schemas.datacontract.org/2004/07/System.Collections.Generic"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><_array xmlns:a=""http://schemas.microsoft.com/2003/10/Serialization/Arrays""><a:int>1</a:int><a:int>0</a:int><a:int>0</a:int><a:int>0</a:int></_array><_head>0</_head><_size>1</_size>{0}<_tail>1</_tail><_version>2</_version></QueueOfint>";
1448+
#if DESKTOP
1449+
var expectedOnDesktop = string.Format(expectedFormat, string.Empty);
1450+
DCS_GenericQueueHelper(expectedOnDesktop, expectedOnDesktop);
1451+
#else
1452+
DCS_GenericQueueHelper(string.Format(expectedFormat, @"<_syncRoot i:nil=""true"" />"), string.Format(expectedFormat, @"<_syncRoot/>"));
1453+
#endif
1454+
}
1455+
1456+
private static void DCS_GenericQueueHelper(string expectedWithUninitializedSyncRoot, string expectedWithInitializedSyncRoot)
14441457
{
14451458
Queue<int> value = new Queue<int>();
14461459
value.Enqueue(1);
1447-
var deserializedValue = SerializeAndDeserialize<Queue<int>>(value, "<QueueOfint xmlns=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><_array xmlns:a=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\"><a:int>1</a:int><a:int>0</a:int><a:int>0</a:int><a:int>0</a:int></_array><_head>0</_head><_size>1</_size><_tail>1</_tail><_version>2</_version></QueueOfint>");
1460+
var deserializedValue = SerializeAndDeserialize<Queue<int>>(value, expectedWithUninitializedSyncRoot);
14481461
var a1 = value.ToArray();
14491462
var a2 = deserializedValue.ToArray();
14501463
Assert.StrictEqual(a1.Length, a2.Length);
1464+
Assert.StrictEqual(a1[0], a2[0]);
1465+
object syncRoot = ((ICollection)value).SyncRoot;
1466+
deserializedValue = SerializeAndDeserialize<Queue<int>>(value, expectedWithInitializedSyncRoot);
1467+
a1 = value.ToArray();
1468+
a2 = deserializedValue.ToArray();
1469+
Assert.StrictEqual(a1.Length, a2.Length);
14511470
Assert.StrictEqual(a1[0], a2[0]);
14521471
}
14531472

0 commit comments

Comments
 (0)