using System.IO; using System.Text; using System.Xml; using System.Xml.Linq; using System.Xml.Serialization; namespace Implab.Xml { public static class XmlSerializerExtensions { public static void Serialize(this XmlSerializer that, object obj, XmlElement element) { Safe.ArgumentNotNull(that, nameof(that)); using (var writer = element.CreateNavigator().AppendChild()) that.Serialize(writer, obj); } public static void Serialize(this XmlSerializer that, object obj, XElement element) { Safe.ArgumentNotNull(that, nameof(that)); using (var writer = element.CreateWriter()) that.Serialize(writer, obj); } public static XDocument SerializeAsXDocumnet(this XmlSerializer that, object obj) { Safe.ArgumentNotNull(that, nameof(that)); var doc = new XDocument(); using (var writer = doc.CreateWriter()) { that.Serialize(writer, obj); } return doc; } public static XmlDocument SerializeAsXmlDocument(this XmlSerializer that, object obj) { Safe.ArgumentNotNull(that, nameof(that)); var doc = new XmlDocument(); using (var writer = doc.CreateNavigator().AppendChild()) { that.Serialize(writer, obj); } return doc; } public static string SerializeAsString(this XmlSerializer that, object obj) { Safe.ArgumentNotNull(that, nameof(that)); using (var writer = new StringWriter()) { that.Serialize(writer, obj); return writer.ToString(); } } public static void SerializeToFile(this XmlSerializer that, object obj, string file, Encoding encoding) { Safe.ArgumentNotNull(that, nameof(that)); using (var writer = new StreamWriter(File.Create(file),encoding)) that.Serialize(writer, obj); } public static void SerializeToFile(this XmlSerializer that, object obj, string file) { SerializeToFile(that, obj, file, Encoding.UTF8); } public static object Deserialize(this XmlSerializer that, XmlElement element) { Safe.ArgumentNotNull(that, nameof(that)); Safe.ArgumentNotNull(element, nameof(element)); using (var reader = element.CreateNavigator().ReadSubtree()) return that.Deserialize(reader); } public static object Deserialize(this XmlSerializer that, XElement element) { Safe.ArgumentNotNull(that, nameof(that)); Safe.ArgumentNotNull(element, nameof(element)); using (var reader = element.CreateReader()) return that.Deserialize(reader); } public static object DeserializeFromString(this XmlSerializer that, string text) { Safe.ArgumentNotNull(that, nameof(that)); using(var reader = new StringReader(text)) return that.Deserialize(reader); } public static object DeserializeFromFile(this XmlSerializer that, string file) { Safe.ArgumentNotNull(that, nameof(that)); using(var reader = File.OpenRead(file)) return that.Deserialize(reader); } } }