public void SerializationDictionaryWithReference() { var obj = new TestClassReferenceWithDictionary(); obj.Parent = new TestClassReference() { Id = 1 }; var other = new TestClassReference { Id = 2, ObjectA = obj.Parent, ReferenceToObjectA = obj.Parent }; obj.All = new Dictionary <int, IReference>() { { 3, new TestClassReference { Id = 3, ObjectA = obj.Parent, ReferenceToObjectA = obj.Parent } }, { 4, new TestClassReference { Id = 4, ObjectA = other, ReferenceToObjectA = other } }, { 2, other }, { 1, obj.Parent } }; CheckSerializationAndDeserialization("ExtendedXmlSerializerTest.Resources.TestClassReferenceWithDictionary.xml", obj); }
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 OptimizedDictionary() { var container = new ConfigurationContainer(); container.UseOptimizedNamespaces() .Type <TestClassReference>() .EnableReferences(x => x.Id); var support = container.ForTesting(); var instance = new TestClassReferenceWithDictionary { Parent = new TestClassReference { Id = 1 } }; var other = new TestClassReference { Id = 2, ObjectA = instance.Parent, ReferenceToObjectA = instance.Parent }; instance.All = new Dictionary <int, IReference> { { 3, new TestClassReference { Id = 3, ObjectA = instance.Parent, ReferenceToObjectA = instance.Parent } }, { 4, new TestClassReference { Id = 4, ObjectA = other, ReferenceToObjectA = other } }, { 2, other }, { 1, instance.Parent } }; var actual = support.Assert(instance, @"<?xml version=""1.0"" encoding=""utf-8""?><TestClassReferenceWithDictionary xmlns:exs=""https://extendedxmlserializer.github.io/v2"" xmlns:sys=""https://extendedxmlserializer.github.io/system"" xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.TestObject;assembly=ExtendedXmlSerializer.Tests""><Parent exs:type=""TestClassReference"" Id=""1"" /><All><sys:Item><Key>3</Key><Value exs:type=""TestClassReference"" Id=""3""><ObjectA exs:type=""TestClassReference"" exs:entity=""1"" /><ReferenceToObjectA exs:type=""TestClassReference"" exs:entity=""1"" /></Value></sys:Item><sys:Item><Key>4</Key><Value exs:type=""TestClassReference"" Id=""4""><ObjectA exs:type=""TestClassReference"" Id=""2""><ObjectA exs:type=""TestClassReference"" exs:entity=""1"" /><ReferenceToObjectA exs:type=""TestClassReference"" exs:entity=""1"" /></ObjectA><ReferenceToObjectA exs:type=""TestClassReference"" exs:entity=""2"" /></Value></sys:Item><sys:Item><Key>2</Key><Value exs:type=""TestClassReference"" exs:entity=""2"" /></sys:Item><sys:Item><Key>1</Key><Value exs:type=""TestClassReference"" exs:entity=""1"" /></sys:Item></All></TestClassReferenceWithDictionary>"); Assert.NotNull(actual.Parent); var list = actual.All; Assert.Same(actual.Parent, list[3] .To <TestClassReference>() .ObjectA); Assert.Same(actual.Parent, list[3] .To <TestClassReference>() .ReferenceToObjectA); Assert.Same(list[4] .To <TestClassReference>() .ObjectA, list[4] .To <TestClassReference>() .ReferenceToObjectA); Assert.Same(list[4] .To <TestClassReference>() .ObjectA.To <TestClassReference>() .ObjectA, actual.Parent); Assert.Same(list[4] .To <TestClassReference>() .ObjectA, list[2]); Assert.Same(actual.Parent, list[1]); }
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]); }
public void List() { var container = new ConfigurationContainer(); container.Type <TestClassReference>() .EnableReferences(x => x.Id); var support = new SerializationSupport(container); var parent = new TestClassReference { Id = 1 }; var other = new TestClassReference { Id = 2, ObjectA = parent, ReferenceToObjectA = parent }; var instance = new List <IReference> { new TestClassReference { Id = 3, ObjectA = parent, ReferenceToObjectA = parent }, new TestClassReference { Id = 4, ObjectA = other, ReferenceToObjectA = other }, other, parent }; var actual = support.Assert(instance, @"<?xml version=""1.0"" encoding=""utf-8""?><List xmlns:ns1=""clr-namespace:ExtendedXmlSerializer.Tests.TestObject;assembly=ExtendedXmlSerializer.Tests"" xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:arguments=""ns1:IReference"" xmlns=""https://extendedxmlserializer.github.io/system""><Capacity>4</Capacity><ns1:TestClassReference Id=""3""><ObjectA exs:type=""ns1:TestClassReference"" Id=""1"" /><ReferenceToObjectA exs:type=""ns1:TestClassReference"" exs:entity=""1"" /></ns1:TestClassReference><ns1:TestClassReference Id=""4""><ObjectA exs:type=""ns1:TestClassReference"" Id=""2""><ObjectA exs:type=""ns1:TestClassReference"" exs:entity=""1"" /><ReferenceToObjectA exs:type=""ns1:TestClassReference"" exs:entity=""1"" /></ObjectA><ReferenceToObjectA exs:type=""ns1:TestClassReference"" exs:entity=""2"" /></ns1:TestClassReference><ns1:TestClassReference exs:entity=""2"" /><ns1:TestClassReference exs:entity=""1"" /></List>"); Assert.Same(actual[0] .To <TestClassReference>() .ObjectA, actual[0] .To <TestClassReference>() .ReferenceToObjectA); Assert.Same(actual[1] .To <TestClassReference>() .ObjectA, actual[1] .To <TestClassReference>() .ReferenceToObjectA); Assert.Same(actual[2], actual[1] .To <TestClassReference>() .ObjectA); Assert.Same(actual[3], actual[0] .To <TestClassReference>() .ObjectA); }
public void ComplexInstance() { var configuration = new ConfigurationContainer(); configuration.Type <TestClassReference>() .EnableReferences(x => x.Id); var support = new SerializationSupport(configuration); var instance = new TestClassReference { Id = 1, ObjectA = new TestClassReference { Id = 2 } }; instance.CyclicReference = instance; instance.ReferenceToObjectA = instance.ObjectA; instance.Lists = new List <IReference> { new TestClassReference { Id = 3 }, new TestClassReference { Id = 4 } }; var actual = support.Assert(instance, @"<?xml version=""1.0"" encoding=""utf-8""?><TestClassReference Id=""1"" xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.TestObject;assembly=ExtendedXmlSerializer.Tests""><CyclicReference xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" exs:entity=""1"" /><ObjectA xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" Id=""2"" /><ReferenceToObjectA xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" exs:entity=""2"" /><Lists><Capacity>4</Capacity><TestClassReference Id=""3"" /><TestClassReference Id=""4"" /></Lists></TestClassReference>"); Assert.NotNull(actual.ObjectA); Assert.Same(instance, instance.CyclicReference); Assert.Same(instance.ObjectA, instance.ReferenceToObjectA); Assert.Equal(3, instance.Lists.First() .Id); Assert.Equal(4, instance.Lists.Last() .Id); }
public void SerializationRefernece() { TestClassReference obj = new TestClassReference(); obj.Id = 1; obj.CyclicReference = obj; obj.ObjectA = new TestClassReference { Id = 2 }; obj.ReferenceToObjectA = obj.ObjectA; obj.Lists = new List <IReference> { new TestClassReference { Id = 3 }, new TestClassReference { Id = 4 } }; CheckSerializationAndDeserialization("ExtendedXmlSerializerTest.Resources.TestClassReference.xml", obj); }
public void SerializationListOfInterfaceReference() { var parent = new TestClassReference { Id = 1 }; var other = new TestClassReference { Id = 2, ObjectA = parent, ReferenceToObjectA = parent }; var obj = new List <IReference>(); obj.Add(new TestClassReference { Id = 3, ObjectA = parent, ReferenceToObjectA = parent }); obj.Add(new TestClassReference { Id = 4, ObjectA = other, ReferenceToObjectA = other }); obj.Add(other); obj.Add(parent); CheckSerializationAndDeserialization("ExtendedXmlSerializer.Tests.Legacy.Resources.ListOfInterfaceReference.xml", obj); }