public void CanCustomizeHowReferencesAreResolved()
        {
            var xml =
                Assembly.GetExecutingAssembly()
                .GetManifestResourceStream(@"SquaredInfinity.Foundation.Serialization.UnitTests.Serialization.FlexiXml.Repository.Resources.repository.xml")
                .ReadToEnd();

            var xDoc = XDocument.Parse(xml);

            var s = new FlexiXmlSerializer();

            var options = new FlexiXmlSerializationOptions();

            options.UniqueIdAttributeName = XName.Get("name");
            options.UniqueIdReferenceAttributeName = XName.Get("ref");

            var o = s.Deserialize<Configuration>(xDoc, options);

            Assert.IsNotNull(o);

            Assert.AreEqual(2, o.Repository.Formatters.Count);
            Assert.AreEqual(2, o.Emails.Count);

            Assert.AreSame(o.Repository.Formatters[0], o.Emails[0].BodyFormatter);
            Assert.AreSame(o.Repository.Formatters[1], o.Emails[0].SubjectFormatter);

            Assert.AreSame(o.Repository.Formatters[0], o.Emails[1].BodyFormatter);
            Assert.AreSame(o.Repository.Formatters[1], o.Emails[1].SubjectFormatter);
        }
        public void UsesKnownTypesLookup()
        {
            // in this test Entity on root is serialized as TestEntityA, but KnownTypes mappign is set (all in xml) to TestEntityB
            // Entity should therefore resolve to TestEntityB

            var xml =
                Assembly.GetExecutingAssembly()
                .GetManifestResourceStream(@"SquaredInfinity.Foundation.Serialization.FlexiXml.KnownTypesLookup.KnownTypesLookup.xml")
                .ReadToEnd();

            var s = new FlexiXmlSerializer();

            var op = new FlexiXmlSerializationOptions();
            op.TypeInformation = TypeInformation.LookupOnly;

            var root = s.Deserialize<TestRoot>(xml, op);

            Assert.IsNotNull(root);

            Assert.AreEqual(typeof(TestEntityB), root.Entity.GetType());
            Assert.AreEqual(13, root.Entity.Id);

        }