using System.Collections.Generic;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO.Compression;
[XmlRoot(ElementName="address")]
[XmlElement(ElementName="street")]
public string Street { get; set; }
[XmlElement(ElementName="city")]
public string City { get; set; }
[XmlElement(ElementName="state")]
public string State { get; set; }
[XmlElement(ElementName="zip")]
public string Zip { get; set; }
[XmlRoot(ElementName="customer")]
[XmlElement(ElementName="name")]
public string Name { get; set; }
[XmlElement(ElementName="address")]
public List<Address> Address { get; set; }
[XmlAttribute(AttributeName="id")]
public string Id { get; set; }
[XmlRoot(ElementName="customers")]
[XmlElement(ElementName="customer")]
public Customer Customer { get; set; }
public static void Test()
using var textReader = new StringReader(GetXml());
using var reader = XmlReader.Create(textReader);
reader.ReadToFollowing("customers");
var serializer = new XmlSerializer(typeof(Customers));
var customer = (Customers)serializer.Deserialize(reader);
static string GetXml() =>
<?xml version="1.0" encoding="UTF-8"?>
<name>Charter Group</name>
<street>100 Main</street>
<street>720 Prospect</street>
<street>120 Ridge</street>
public static class XmlSerializationHelper
public static T LoadFromXml<T>(this string xmlString, XmlSerializer serial = null)
serial = serial ?? new XmlSerializer(typeof(T));
using (var reader = new StringReader(xmlString))
return (T)serial.Deserialize(reader);
public static string GetXml<T>(this T obj, bool omitStandardNamespaces)
return obj.GetXml(null, omitStandardNamespaces);
public static string GetXml<T>(this T obj, XmlSerializer serializer = null, bool omitStandardNamespaces = false)
XmlSerializerNamespaces ns = null;
if (omitStandardNamespaces)
ns = new XmlSerializerNamespaces();
using (var textWriter = new StringWriter())
var settings = new XmlWriterSettings() { Indent = true };
using (var xmlWriter = XmlWriter.Create(textWriter, settings))
(serializer ?? new XmlSerializer(obj.GetType())).Serialize(xmlWriter, obj, ns);
return textWriter.ToString();
public static string GetOuterXml(this XmlNode node, bool indent = true)
using (var textWriter = new StringWriter())
var settings = new XmlWriterSettings
OmitXmlDeclaration = true,
using (var xmlWriter = XmlWriter.Create(textWriter, settings))
return textWriter.ToString();
public static void Main()
Console.WriteLine("Environment version: {0} ({1}, {2})", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription , Environment.Version, Environment.OSVersion);
Console.WriteLine("Failed with unhandled exception: ");