コード例 #1
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]);
        }