コード例 #1
0
        public void Verify()
        {
            const string target = "I am Attribute, Hear me roar! #rawr!";

            var configuration = new ConfigurationContainer();

            configuration.Type <SimpleSubject>()
            .Member(x => x.Message)
            .Attribute(x => x == target);

            var support  = new SerializationSupport(configuration);
            var expected = new SimpleSubject {
                Message = "Hello World!", Number = 6776
            };
            var content = support.Assert(expected,
                                         @"<?xml version=""1.0"" encoding=""utf-8""?><AttributeSpecificationTests-SimpleSubject xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.ContentModel.Members;assembly=ExtendedXmlSerializer.Tests""><Message>Hello World!</Message><Number>6776</Number></AttributeSpecificationTests-SimpleSubject>");

            Assert.Equal(expected.Message, content.Message);
            Assert.Equal(expected.Number, content.Number);

            expected.Message = target;
            var attributes = support.Assert(expected,
                                            @"<?xml version=""1.0"" encoding=""utf-8""?><AttributeSpecificationTests-SimpleSubject Message=""I am Attribute, Hear me roar! #rawr!"" xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.ContentModel.Members;assembly=ExtendedXmlSerializer.Tests""><Number>6776</Number></AttributeSpecificationTests-SimpleSubject>");

            Assert.Equal(expected.Message, attributes.Message);
            Assert.Equal(expected.Number, attributes.Number);
        }
コード例 #2
0
        public void ComplexList()
        {
            var container = new ConfigurationContainer();

            container.Type <TestClassReference>()
            .EnableReferences(x => x.Id);
            container.EnableDeferredReferences();
            DoTest(new SerializationSupport(container));
        }
コード例 #3
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]);
        }
コード例 #4
0
        public void VerifyNoneRemovesConverter()
        {
            var container = new ConfigurationContainer();
            var extension = container.Root.With <ConvertersExtension>();

            extension.Converters.Count(x => x.IsSatisfiedBy(typeof(DateTime).GetTypeInfo()))
            .Should()
            .BeGreaterOrEqualTo(1);

            container.Type <DateTime>().Register().Converter().None();
            extension.Converters.Count(x => x.IsSatisfiedBy(typeof(DateTime).GetTypeInfo()))
            .Should()
            .Be(0);
        }
コード例 #5
0
        public void Ignore()
        {
            var configuration = new ConfigurationContainer();

            configuration.Type <Subject>()
            .Member(x => x.Property2)
            .Ignore();
            var support  = new SerializationSupport(configuration);
            var instance = new Subject {
                Property1 = "Hello World!", Property2 = 1000, Property3 = DateTime.Now
            };
            var actual = support.Cycle(instance);

            Assert.NotEqual(instance.Property2, actual.Property2);
        }
コード例 #6
0
        public void Include()
        {
            var serializer = new ConfigurationContainer();

            serializer.Type <Subject>().Member(x => x.Property2).Include();
            var support  = new SerializationSupport(serializer);
            var instance = new Subject {
                Property1 = "Hello World!", Property2 = 1000, Property3 = DateTime.Now
            };
            var actual = support.Cycle(instance);

            Assert.NotEqual(instance.Property1, actual.Property1);
            Assert.Equal(instance.Property2, actual.Property2);
            Assert.NotEqual(instance.Property3, actual.Property3);
        }
コード例 #7
0
        public void VerifyAdditional()
        {
            var container = new Shared.Issue517.ContainerNameSpace.Container();

            for (int i = 0; i < 1; i++)
            {
                container.Childrens.Add(new Shared.Issue517.ItemNameSpace.Item());
            }

            IConfigurationContainer config = new ConfigurationContainer();

            config.Type <Shared.Issue517.ContainerNameSpace.Container>().AddMigration(new EmptyMigration());
            var serializer = config.Create().ForTesting();

            serializer.Cycle(container).Should().BeEquivalentTo(container);
        }
コード例 #8
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);
        }
コード例 #9
0
        public void GlobalOnlyConfiguredProperties()
        {
            var container = new ConfigurationContainer();
            var type      = container.Type <Subject>();

            type.Member(x => x.Property2);
            type.Member(x => x.Property3);
            type.IncludeConfiguredMembers();
            var support  = new SerializationSupport(container);
            var instance = new Subject {
                Property1 = "Hello World!", Property2 = 1000, Property3 = DateTime.Now
            };
            var actual = support.Cycle(instance);

            Assert.NotEqual(instance.Property1, actual.Property1);
            Assert.Equal(instance.Property2, actual.Property2);
            Assert.Equal(instance.Property3, actual.Property3);
        }
コード例 #10
0
        public void MemberInfoConfiguration()
        {
            var container  = new ConfigurationContainer();
            var type       = container.Type <Subject>();
            var memberInfo = typeof(Subject).GetProperty(nameof(Subject.Property1));

            type.Member(memberInfo, c => c.EmitWhen(v => (string)v == "ABC"));
            memberInfo = typeof(Subject).GetProperty(nameof(Subject.Property2));
            type.Member(memberInfo, c => c.EmitWhenInstance(subject => subject.Property2 == 3));
            var support  = new SerializationSupport(container);
            var instance = new Subject {
                Property1 = "AB", Property2 = 1000, Property3 = DateTime.Now
            };
            var actual = support.Cycle(instance);

            Assert.NotEqual(instance.Property1, actual.Property1);
            Assert.NotEqual(instance.Property2, actual.Property2);
            Assert.Equal(instance.Property3, actual.Property3);
        }
コード例 #11
0
        public void SpecificChildInheritance()
        {
            var first = new ChildClass {
                Name = "Key"
            };
            var instance = new Container {
                First = first, Second = first
            };
            var container = new ConfigurationContainer();

            container.Type <ChildClass>()
            .EnableReferences(x => x.Name);
            var support = new SerializationSupport(container);
            var actual  = support.Cycle(instance);

            actual.First.Should()
            .NotBeNull()
            .And.BeOfType <ChildClass>()
            .And.BeSameAs(actual.Second);
        }
コード例 #12
0
        public void ConfigureNameForType()
        {
            var configuration = new ConfigurationContainer();

            configuration.Type <SimpleTestSubject>().Name(Testclass);

            var names = configuration.Root.Find <TypeNamesExtension>()
                        .Names;

            Assert.Equal(names[typeof(SimpleTestSubject).GetTypeInfo()], Testclass);
            Assert.False(names.ContainsKey(typeof(TestClassPrimitiveTypesNullable).GetTypeInfo()));

            var support  = new SerializationSupport(configuration);
            var expected = new SimpleTestSubject {
                BasicProperty = "Hello World!"
            };
            var actual = support.Assert(expected,
                                        @"<?xml version=""1.0"" encoding=""utf-8""?><UpdatedTestClassName xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.Configuration;assembly=ExtendedXmlSerializer.Tests""><BasicProperty>Hello World!</BasicProperty></UpdatedTestClassName>");

            Assert.Equal(expected.BasicProperty, actual.BasicProperty);
        }
コード例 #13
0
        public void Verify()
        {
            var container = new ConfigurationContainer();

            container.Type <Subject>()
            .AddMigration(new PropertyMigration("OldPropertyName", nameof(Subject.PropertyName)));
            var support  = new SerializationSupport(container);
            var instance = new Subject {
                PropertyName = "Hello World!"
            };

            support.Assert(instance,
                           @"<?xml version=""1.0"" encoding=""utf-8""?><MigrationsExtensionTests-Subject xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:version=""1"" xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.ExtensionModel.Xml;assembly=ExtendedXmlSerializer.Tests""><PropertyName>Hello World!</PropertyName></MigrationsExtensionTests-Subject>");

            var data =
                @"<?xml version=""1.0"" encoding=""utf-8""?><MigrationsExtensionTests-Subject xmlns:exs=""https://extendedxmlserializer.github.io/v2"" xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.ExtensionModel.Xml;assembly=ExtendedXmlSerializer.Tests""><OldPropertyName>Hello World from Old Property!</OldPropertyName></MigrationsExtensionTests-Subject>";
            var migrated = support.Deserialize <Subject>(data);

            Assert.NotNull(migrated);
            Assert.Equal("Hello World from Old Property!", migrated.PropertyName);
        }
コード例 #14
0
        public void SimpleEntity()
        {
            var configuration = new ConfigurationContainer();

            configuration.Type <Subject>()
            .Member(x => x.Id)
            .Identity();
            var support  = new SerializationSupport(configuration);
            var expected = new Subject
            {
                Id           = Guid,
                PropertyName = "Primary Root"
            };

            expected.Self = expected;
            var actual = support.Assert(expected,
                                        @"<?xml version=""1.0"" encoding=""utf-8""?><ReferencesExtensionTests-Subject Id=""6dbb618f-dbbd-4909-9644-a1d955f06249"" xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.ExtensionModel.References;assembly=ExtendedXmlSerializer.Tests""><Self xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:entity=""6dbb618f-dbbd-4909-9644-a1d955f06249"" /><PropertyName>Primary Root</PropertyName></ReferencesExtensionTests-Subject>");

            Assert.NotNull(actual.Self);
            Assert.Same(actual, actual.Self);
        }
コード例 #15
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);
        }
コード例 #16
0
        public void ConfigureEncryptDifferenetOrder()
        {
            var container = new ConfigurationContainer();

            container.UseAutoFormatting();

            Assert.Null(container.Root.Find <EncryptionExtension>());
            container.Type <TestClassWithEncryptedData>()
            .Member(p => p.Password, x => x.Encrypt())
            .Member(p => p.Salary)
            .Encrypt();

            container.UseEncryptionAlgorithm();

            var extension = container.Root.Find <EncryptionExtension>();

            Assert.NotNull(extension);
            var type = container.GetTypeConfiguration(typeof(TestClassWithEncryptedData));

            Assert.NotNull(type);

            var member   = type.Member(nameof(TestClassWithEncryptedData.Salary));
            var property = ((ISource <MemberInfo>)member).Get();

            Assert.NotNull(property);
            Assert.Contains(property, extension.Registered);

            const int salary   = 6776;
            var       instance = new TestClassWithEncryptedData {
                Salary = salary
            };
            var actual =
                new SerializationSupport(container).Assert(instance,
                                                           @"<?xml version=""1.0"" encoding=""utf-8""?><TestClassWithEncryptedData Salary=""Njc3Ng=="" xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.TestObject;assembly=ExtendedXmlSerializer.Tests"" />");

            Assert.Equal(salary, actual.Salary);
        }
コード例 #17
0
        public void Dictionary()
        {
            var container = new ConfigurationContainer();

            container.Type <TestClassReference>()
            .EnableReferences(x => x.Id);
            var support = new SerializationSupport(container);

            var instance =
                new TestClassReferenceWithDictionary
            {
                Parent = new TestClassReference
                {
                    Id   = 1,
                    Name = "Hello World, this is a Name!"
                }
            };
            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=""clr-namespace:ExtendedXmlSerializer.Tests.TestObject;assembly=ExtendedXmlSerializer.Tests""><Parent xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" Id=""1""><Name>Hello World, this is a Name!</Name></Parent><All><Item xmlns=""https://extendedxmlserializer.github.io/system""><Key>3</Key><Value xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" Id=""3""><ObjectA exs:type=""TestClassReference"" exs:entity=""1"" /><ReferenceToObjectA exs:type=""TestClassReference"" exs:entity=""1"" /></Value></Item><Item xmlns=""https://extendedxmlserializer.github.io/system""><Key>4</Key><Value xmlns:exs=""https://extendedxmlserializer.github.io/v2"" 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></Item><Item xmlns=""https://extendedxmlserializer.github.io/system""><Key>2</Key><Value xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" exs:entity=""2"" /></Item><Item xmlns=""https://extendedxmlserializer.github.io/system""><Key>1</Key><Value xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" exs:entity=""1"" /></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]);
        }
コード例 #18
0
        public void Examples()
        {
            new ConfigurationContainer().EnableDeferredReferences()
            .Type <IElement>().EnableReferences(p => p.Id)
            .Type <Section>().EnableReferences(p => p.Id)
            .Type <Building>().EnableReferences(p => p.Id)
            .Create();


            new ConfigurationContainer().Type <Section>()
            .Name("person")
            .Member(p => p.IsSelected).Name("Selected").Identity().Order(2)
            .Member(p => p.IsEmpty).Name("Empty")

            .Create();


            var serializer = new ConfigurationContainer()

                             .Type <Person>()         // Configuration of Person class
                             .Member(p => p.Password) // First member
                             .Name("P")
                             .Encrypt()
                             .Member(p => p.Name)    // Second member
                             .Name("T")
                             .UseEncryptionAlgorithm(new CustomEncryption())
                             .Type <TestClass>()   // Configuration of another class
                             .CustomSerializer(new TestClassSerializer())
                             .Create();


            new ConfigurationContainer()
            .Type <Person>()
            .Member(p => p.Name).Identity()
            .OnlyConfiguredProperties()
            .Create();

            new ConfigurationContainer().Type <Person>()
            .AddMigration(element => {})
            .OnlyConfiguredProperties()
            .Create();

            new ConfigurationContainer().Type <Person>()
            .OnlyConfiguredProperties()
            .AddMigration(element => { })
            .Create();

            new ConfigurationContainer()
            .Type <Person>()
            .Member(p => p.Name).Identity()
            .OnlyConfiguredProperties()
            .Create();

            new ConfigurationContainer()
            .Type <Person>()
            .OnlyConfiguredProperties()
            .Member(p => p.Name).Identity()
            .Create();

            new ConfigurationContainer().Type <Person>()
            .CustomSerializer((writer, person) => {}, element => new Person())
            .EnableReferences(p => p.Name);

            new ConfigurationContainer().Type <Person>()
            .EnableReferences(p => p.Name)
            .CustomSerializer((writer, person) => { }, element => new Person());

            new ConfigurationContainer().Type <Person>()
            .CustomSerializer((writer, person) => { }, element => new Person())
            .Member(p => p.Name).Identity();

            new ConfigurationContainer().Type <Person>()
            .Member(p => p.Name).Identity()
            .CustomSerializer((writer, person) => { }, element => new Person());

            new ConfigurationContainer().Type <Person>()
            .AddMigration(element => { })
            .Member(p => p.Name).Identity();

            new ConfigurationContainer().Type <Person>()
            .Member(p => p.Name)
            .Identity()
            .AddMigration(element => {});

            var config = new ConfigurationContainer();

            config.EnableDeferredReferences();
            config.Type <Section>().Member(p => p.Id).Name("Identity");
            config.Type <Section>().EnableReferences(p => p.Id);
            var exs = config.Create();
        }