public void should_serialize_collection_into_string() { var testCollection = new test_collection() { new ChangeA { PropertyA = "Change A" }, new ChangeB { PropertyA = "Change B" }, }; string xml = testCollection.SerializeToXml(typeof(IChange)); XElement actualXml = XElement.Parse(xml); actualXml.Name.LocalName.Should().Be("Changes"); actualXml.Should().HaveElement("Change"); IEnumerable <XElement> changes = from change in actualXml.Elements("Change") select change; changes.Should().HaveCount(2); var changeA = changes.SingleOrDefault( e => e.Attribute("AssemblyQualifiedName") != null && e.Attribute("AssemblyQualifiedName").Value == "RuskinDantra.Extensions.UnitTests.ChangeA, RuskinDantra.Extensions.UnitTests"); changeA.Should().NotBeNull(); changeA.Element("ChangeA").Element("PropertyA").Should().HaveValue("Change A"); changeA.Element("ChangeA").Element("ChangeType").Should().HaveValue("ChangeA"); var changeB = changes.SingleOrDefault( e => e.Attribute("AssemblyQualifiedName") != null && e.Attribute("AssemblyQualifiedName").Value == "RuskinDantra.Extensions.UnitTests.ChangeB, RuskinDantra.Extensions.UnitTests"); changeB.Should().NotBeNull(); changeB.Element("ChangeB").Element("PropertyA").Should().HaveValue("Change B"); changeB.Element("ChangeB").Element("ChangeType").Should().HaveValue("ChangeB"); }
public void should_deserialize_string_into_collection() { var xml = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n" + "<Changes>\r\n" + " <Change AssemblyQualifiedName=\"RuskinDantra.Extensions.UnitTests.ChangeA, RuskinDantra.Extensions.UnitTests\">\r\n" + " <ChangeA xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n" + " <PropertyA>Change A</PropertyA>\r\n" + " <ChangeType>ChangeA</ChangeType>\r\n" + " </ChangeA>\r\n" + " </Change>\r\n" + " <Change AssemblyQualifiedName=\"RuskinDantra.Extensions.UnitTests.ChangeB, RuskinDantra.Extensions.UnitTests\">\r\n" + " <ChangeB xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n" + " <PropertyA>Change B</PropertyA>\r\n" + " <ChangeType>ChangeB</ChangeType>\r\n" + " </ChangeB>\r\n" + " </Change>\r\n" + "</Changes>"; test_collection testCollection = xml.DeserializeFromXml <test_collection>(typeof(IChange)); testCollection.Should().HaveCount(2); testCollection.ElementAt(0).Should().BeOfType <ChangeA>(); testCollection.ElementAt(1).Should().BeOfType <ChangeB>(); }