public void TestWeakTypesTheSameXml()
        {
            var serializableStrong = new RoundtripTest();
            var serializableWeak   = new RoundtripWeakTest();

            var xmlStrong = serializableStrong.ToXml();
            var xmlWeak   = serializableWeak.ToXml();

            Assert.AreEqual(xmlStrong.Replace("RoundtripTest", "RoundtripWeakTest"), xmlWeak);
        }
        public void TestRoundtripWeakTypesWithEmittedTypes()
        {
            var serializable     = new RoundtripTest();
            var serializableWeak = new RoundtripWeakTest();

            var xml = serializableWeak.ToXml(emitTypeInfo: true);

            var deserialized = XmlSerialization.LoadFromXml <RoundtripWeakTest>(xml);

            Assert.AreEqual(serializable.AnyString, deserialized.AnyString);
            Assert.AreEqual(serializable.AnyChar, deserialized.AnyChar);
            Assert.AreEqual(serializable.AnyByteMin, deserialized.AnyByteMin);
            Assert.AreEqual(serializable.AnySByteMin, deserialized.AnySByteMin);
            Assert.AreEqual(serializable.AnyInt16Min, deserialized.AnyInt16Min);
            Assert.AreEqual(serializable.AnyUInt16Min, deserialized.AnyUInt16Min);
            Assert.AreEqual(serializable.AnyInt32Min, deserialized.AnyInt32Min);
            Assert.AreEqual(serializable.AnyUInt32Min, deserialized.AnyUInt32Min);
            Assert.AreEqual(serializable.AnyInt64Min, deserialized.AnyInt64Min);
            Assert.AreEqual(serializable.AnyUInt64Min, deserialized.AnyUInt64Min);
            Assert.AreEqual(serializable.AnySingleMin, deserialized.AnySingleMin);
            Assert.AreEqual(serializable.AnyDoubleMin, deserialized.AnyDoubleMin);
            Assert.AreEqual(serializable.AnyDecimalMin, deserialized.AnyDecimalMin);
            Assert.AreEqual(serializable.AnyByteMax, deserialized.AnyByteMax);
            Assert.AreEqual(serializable.AnySByteMax, deserialized.AnySByteMax);
            Assert.AreEqual(serializable.AnyInt16Max, deserialized.AnyInt16Max);
            Assert.AreEqual(serializable.AnyUInt16Max, deserialized.AnyUInt16Max);
            Assert.AreEqual(serializable.AnyInt32Max, deserialized.AnyInt32Max);
            Assert.AreEqual(serializable.AnyUInt32Max, deserialized.AnyUInt32Max);
            Assert.AreEqual(serializable.AnyInt64Max, deserialized.AnyInt64Max);
            Assert.AreEqual(serializable.AnyUInt64Max, deserialized.AnyUInt64Max);
            Assert.AreEqual(serializable.AnySingleMax, deserialized.AnySingleMax);
            Assert.AreEqual(serializable.AnyDoubleMax, deserialized.AnyDoubleMax);
            Assert.AreEqual(serializable.AnyDecimalMax, deserialized.AnyDecimalMax);
            Assert.AreEqual(serializable.BoolTrue, deserialized.BoolTrue);
            Assert.AreEqual(serializable.BoolFalse, deserialized.BoolFalse);
            Assert.AreEqual(serializable.AnyDateTimeMin, deserialized.AnyDateTimeMin);
            Assert.AreEqual(serializable.AnyDateTimeMax, deserialized.AnyDateTimeMax);
            Assert.AreEqual(serializable.AnyGuid, deserialized.AnyGuid);
            Assert.AreEqual(serializable.AnyCharNullable, deserialized.AnyCharNullable);
            Assert.AreEqual(serializable.AnyByteMinNullable, deserialized.AnyByteMinNullable);
            Assert.AreEqual(serializable.AnySByteMinNullable, deserialized.AnySByteMinNullable);
            Assert.AreEqual(serializable.AnyInt16MinNullable, deserialized.AnyInt16MinNullable);
            Assert.AreEqual(serializable.AnyUInt16MinNullable, deserialized.AnyUInt16MinNullable);
            Assert.AreEqual(serializable.AnyInt32MinNullable, deserialized.AnyInt32MinNullable);
            Assert.AreEqual(serializable.AnyUInt32MinNullable, deserialized.AnyUInt32MinNullable);
            Assert.AreEqual(serializable.AnyInt64MinNullable, deserialized.AnyInt64MinNullable);
            Assert.AreEqual(serializable.AnyUInt64MinNullable, deserialized.AnyUInt64MinNullable);
            Assert.AreEqual(serializable.AnySingleMinNullable, deserialized.AnySingleMinNullable);
            Assert.AreEqual(serializable.AnyDoubleMinNullable, deserialized.AnyDoubleMinNullable);
            Assert.AreEqual(serializable.AnyDecimalMinNullable, deserialized.AnyDecimalMinNullable);
            Assert.AreEqual(serializable.AnyByteMaxNullable, deserialized.AnyByteMaxNullable);
            Assert.AreEqual(serializable.AnySByteMaxNullable, deserialized.AnySByteMaxNullable);
            Assert.AreEqual(serializable.AnyInt16MaxNullable, deserialized.AnyInt16MaxNullable);
            Assert.AreEqual(serializable.AnyUInt16MaxNullable, deserialized.AnyUInt16MaxNullable);
            Assert.AreEqual(serializable.AnyInt32MaxNullable, deserialized.AnyInt32MaxNullable);
            Assert.AreEqual(serializable.AnyUInt32MaxNullable, deserialized.AnyUInt32MaxNullable);
            Assert.AreEqual(serializable.AnyInt64MaxNullable, deserialized.AnyInt64MaxNullable);
            Assert.AreEqual(serializable.AnyUInt64MaxNullable, deserialized.AnyUInt64MaxNullable);
            Assert.AreEqual(serializable.AnySingleMaxNullable, deserialized.AnySingleMaxNullable);
            Assert.AreEqual(serializable.AnyDoubleMaxNullable, deserialized.AnyDoubleMaxNullable);
            Assert.AreEqual(serializable.AnyDecimalMaxNullable, deserialized.AnyDecimalMaxNullable);
            Assert.AreEqual(serializable.BoolTrueNullable, deserialized.BoolTrueNullable);
            Assert.AreEqual(serializable.BoolFalseNullable, deserialized.BoolFalseNullable);
            Assert.AreEqual(serializable.AnyDateTimeMinNullable, deserialized.AnyDateTimeMinNullable);
            Assert.AreEqual(serializable.AnyDateTimeMaxNullable, deserialized.AnyDateTimeMaxNullable);
            Assert.AreEqual(serializable.AnyGuidNullable, deserialized.AnyGuidNullable);
            Assert.AreEqual(serializable.Season, deserialized.Season);
            Assert.AreEqual(serializable.Features, deserialized.Features);
            Assert.AreEqual(serializable.SeasonAsNumber, deserialized.SeasonAsNumber);
            Assert.AreEqual(serializable.FeaturesAsNumber, deserialized.FeaturesAsNumber);

            Assert.IsTrue(((byte[])deserialized.Base64ByteArray).SequenceEqual(serializable.Base64ByteArray));
            Assert.IsTrue(((string[])deserialized.AnyStringArray).SequenceEqual(serializable.AnyStringArray));
            Assert.IsTrue(((char[])deserialized.AnyCharArray).SequenceEqual(serializable.AnyCharArray));
            Assert.IsTrue(((byte[])deserialized.AnyByteArray).SequenceEqual(serializable.AnyByteArray));
            Assert.IsTrue(((sbyte[])deserialized.AnySByteArray).SequenceEqual(serializable.AnySByteArray));
            Assert.IsTrue(((Int16[])deserialized.AnyInt16Array).SequenceEqual(serializable.AnyInt16Array));
            Assert.IsTrue(((UInt16[])deserialized.AnyUInt16Array).SequenceEqual(serializable.AnyUInt16Array));
            Assert.IsTrue(((Int32[])deserialized.AnyInt32Array).SequenceEqual(serializable.AnyInt32Array));
            Assert.IsTrue(((UInt32[])deserialized.AnyUInt32Array).SequenceEqual(serializable.AnyUInt32Array));
            Assert.IsTrue(((Int64[])deserialized.AnyInt64Array).SequenceEqual(serializable.AnyInt64Array));
            Assert.IsTrue(((UInt64[])deserialized.AnyUInt64Array).SequenceEqual(serializable.AnyUInt64Array));
            Assert.IsTrue(((Single[])deserialized.AnySingleArray).SequenceEqual(serializable.AnySingleArray));
            Assert.IsTrue(((Double[])deserialized.AnyDoubleArray).SequenceEqual(serializable.AnyDoubleArray));
            Assert.IsTrue(((Decimal[])deserialized.AnyDecimalArray).SequenceEqual(serializable.AnyDecimalArray));
            Assert.IsTrue(((bool[])deserialized.BoolArray).SequenceEqual(serializable.BoolArray));
            Assert.IsTrue(((DateTime[])deserialized.AnyDateTimeArray).SequenceEqual(serializable.AnyDateTimeArray));
            Assert.IsTrue(((Guid[])deserialized.AnyGuidArray).SequenceEqual(serializable.AnyGuidArray));
            Assert.IsTrue(((Seasons[])deserialized.SeasonArray).SequenceEqual(serializable.SeasonArray));
            Assert.IsTrue(((PhoneFeatures[])deserialized.FeaturesArray).SequenceEqual(serializable.FeaturesArray));
            Assert.IsTrue(((Seasons[])deserialized.SeasonArrayAsNumber).SequenceEqual(serializable.SeasonArrayAsNumber));
            Assert.IsTrue(((PhoneFeatures[])deserialized.FeaturesArrayAsNumber).SequenceEqual(serializable.FeaturesArrayAsNumber));

            Assert.AreEqual(((InnerClass)serializable.ObjectProperty).SimpleInnerProperty, serializable.ObjectProperty.SimpleInnerProperty);

            Assert.AreEqual(((InnerClass[])serializable.InnerObjects)[0].SimpleInnerProperty, serializable.InnerObjects[0].SimpleInnerProperty);
            Assert.AreEqual(((InnerClass[])serializable.InnerObjects)[1].SimpleInnerProperty, serializable.InnerObjects[1].SimpleInnerProperty);
        }