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);
        }
Пример #3
0
        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]);
        }
Пример #4
0
        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]);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }