public void SerializationListWithReference() { var obj = new TestClassReferenceWithList(); obj.Parent = new TestClassReference() { Id = 1 }; var other = new TestClassReference { Id = 2, ObjectA = obj.Parent, ReferenceToObjectA = obj.Parent }; obj.All = new List <IReference> { new TestClassReference { Id = 3, ObjectA = obj.Parent, ReferenceToObjectA = obj.Parent }, new TestClassReference { Id = 4, ObjectA = other, ReferenceToObjectA = other }, other, obj.Parent }; CheckSerializationAndDeserialization("ExtendedXmlSerializerTest.Resources.TestClassReferenceWithList.xml", obj); }
public void ComplexList() { var container = new ConfigurationContainer(); container.Type <TestClassReference>() .EnableReferences(x => x.Id); var support = new SerializationSupport(container); var instance = new TestClassReferenceWithList { Parent = new TestClassReference { Id = 1 } }; var other = new TestClassReference { Id = 2, ObjectA = instance.Parent, ReferenceToObjectA = instance.Parent }; instance.All = new List <IReference> { new TestClassReference { Id = 3, ObjectA = instance.Parent, ReferenceToObjectA = instance.Parent }, new TestClassReference { Id = 4, ObjectA = other, ReferenceToObjectA = other }, other, instance.Parent }; var actual = support.Assert(instance, @"<?xml version=""1.0"" encoding=""utf-8""?><TestClassReferenceWithList xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.TestObject;assembly=ExtendedXmlSerializer.Tests""><Parent xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" Id=""1"" /><All><Capacity>4</Capacity><TestClassReference Id=""3""><ObjectA xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" exs:entity=""1"" /><ReferenceToObjectA xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" exs:entity=""1"" /></TestClassReference><TestClassReference Id=""4""><ObjectA xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" Id=""2""><ObjectA exs:type=""TestClassReference"" exs:entity=""1"" /><ReferenceToObjectA exs:type=""TestClassReference"" exs:entity=""1"" /></ObjectA><ReferenceToObjectA xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" exs:entity=""2"" /></TestClassReference><TestClassReference xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:entity=""2"" /><TestClassReference xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:entity=""1"" /></All></TestClassReferenceWithList>"); Assert.NotNull(actual.Parent); var list = actual.All.Cast <TestClassReference>() .ToList(); Assert.Same(actual.Parent, list[0] .ObjectA); Assert.Same(actual.Parent, list[0] .ReferenceToObjectA); Assert.Same(list[1] .ObjectA, list[1] .ReferenceToObjectA); Assert.Same(list[1] .ObjectA.To <TestClassReference>() .ObjectA, list[1] .ObjectA.To <TestClassReference>() .ReferenceToObjectA); Assert.Same(actual.Parent, list[1] .ObjectA.To <TestClassReference>() .ObjectA); Assert.Same(list[2], list[1] .ObjectA); Assert.Same(actual.Parent, list[3]); }