public void CustomAnyAttributeSerializer_ShouldSerializeToCustomValue() { int i = 0; var description = new FluentSchemaDescription(); description.Element<Person>("Person") .AnyAttribute<string>(x => x.CustomStringAttributes, reader => "Attribute:" + reader.LocalName + "=" + reader.Value, (writer, attr) => writer.WriteAttributeString("CustomAttr" + (++i), "MissingValue")); var schema = description.Build(); var serializer = new Serializer(schema); var person = serializer.Deserialize<Person>("<Person Custom1='Value1' Custom2='Value2' />".ToStream()); var stream = new MemoryStream(); serializer.Serialize(stream, person); XAssert.AreEqual("<Person CustomAttr1='MissingValue' CustomAttr2='MissingValue' />", stream.ToXDocument().ToString()); }
public void SerializeDocument_ShouldSucceed() { var stream = new MemoryStream(); XNamespace dmsNs = "http://dms.com"; XNamespace testNs = "http://test.com"; var document = new Document { CustomElements = new List<XElement> { new XElement(dmsNs + "CustomElement1", new XElement(dmsNs + "Child1"), new XElement(dmsNs + "Child2", new XAttribute("Attr1", "Value1"))), new XElement(testNs + "CustomElement2", new XAttribute("Name", "Value2")), new XElement(testNs + "CustomElement3", new XAttribute("Name", "Value3")), }, Persons = new List<Person> { new Person { Id = 123, FirstName = "James", LastName = "Jefferson", IsEnabled = true, DateOfBirth = new DateTime(2010, 02, 12, 23, 59, 59, DateTimeKind.Utc), TimeSinceLastLogin = TimeSpan.FromMinutes(20), Address = new Address {StreetName = "231 Queen Street", City = "Auckland", Comments = "Some comments"}, CustomAttributes = new List<XAttribute> { new XAttribute("Custom1", "CustomValue1"), new XAttribute(dmsNs + "Custom2", "CustomValue2") }, ContactMethods = new List<ContactMethod> { new ContactMethod {Type = ContactMethodType.Email, Value = "*****@*****.**"}, new AddressContactMethod { Type = ContactMethodType.Address, OptionalType = ContactMethodType.Email, Value = "Auckland City", StreetName = "232 Queen Street" }, new ContactMethod {Type = ContactMethodType.HomePhone, Value = "555-1234"} } }, new Person { Id = 124, FirstName = "Paul", LastName = "Jefferson", IsEnabled = false, Address = new Address {StreetName = "500 Dominion Road", City = "Auckland"}, } } }; var serializer = new Serializer(FullSchema()); serializer.Serialize(stream, document); var expected = XDocument.Parse(@"<Document xmlns='http://test.com' xmlns:dms='http://dms.com'> <Person Id='123' FirstName='James' LastName='Jefferson' DateOfBirth='2010-02-12T23:59:59Z' TimeSinceLastLogin='******' Custom1='CustomValue1' dms:Custom2='CustomValue2'> <IsEnabled>true</IsEnabled> <Address StreetName='231 Queen Street' City='Auckland'>Some comments</Address> <ContactMethods> <ContactMethod Type='Email' Value='*****@*****.**' /> <AddressContactMethod Type='Address' OptionalType='Email' Value='Auckland City' StreetName='232 Queen Street' /> <ContactMethod Type='HomePhone' Value='555-1234' /> </ContactMethods> </Person> <Person Id='124' FirstName='Paul' LastName='Jefferson'> <IsEnabled>false</IsEnabled> <Address StreetName='500 Dominion Road' City='Auckland' /> </Person> <dms:CustomElement1> <dms:Child1 /> <dms:Child2 Attr1='Value1' /> </dms:CustomElement1> <CustomElement2 Name='Value2' /> <CustomElement3 Name='Value3' /> </Document>"); Debug.WriteLine(stream.ToXDocument()); XAssert.AreEqual(expected, stream.ToXDocument()); }
public void SerializeFragment_ShouldSucceed() { var stream = new MemoryStream(); var address = new Address {StreetName = "231 Queen Street", City = "Auckland"}; var serializer = new Serializer(FullSchema()); serializer.Serialize(stream, address); var expected = XDocument.Parse(@"<Address StreetName='231 Queen Street' City='Auckland' xmlns='http://test.com' />"); XAssert.AreEqual(expected, stream.ToXDocument()); }
public void CustomAnyElementSerializer_ShouldSerializeToCustomValue() { var description = new FluentSchemaDescription(); description.Element<Person>("Person") .AnyElement<int>(x => x.CustomIntegerElements, reader => reader.ReadElementContentAsInt(), (writer, value) => writer.WriteElementString("NewName", value.ToString())); var schema = description.Build(); var serializer = new Serializer(schema); var person = new Person {CustomIntegerElements = new List<int> {1, 2, 3}}; var stream = new MemoryStream(); serializer.Serialize(stream, person); XAssert.AreEqual(@"<Person> <NewName>1</NewName> <NewName>2</NewName> <NewName>3</NewName> </Person>", stream.ToXDocument().ToString()); }