using System.Collections.Generic;
using System.Xml.Serialization;
using System.IO.Compression;
public static void Test()
var xml = @"<foo Name=""hello""><bar Id=""101"">var value</bar></foo>";
XmlDocument doc = new XmlDocument();
Console.WriteLine(doc.GetOuterXml());
public static partial class XmlSerializationHelper
public static string GetOuterXml(this XmlDocument doc, bool indent = true)
using (var textWriter = new StringWriterWithEncoding())
using (var xmlWriter = new CustomQuoteCharXmlTextWriter(textWriter) { Formatting = indent ? Formatting.Indented : Formatting.None })
return textWriter.ToString();
public class CustomQuoteCharXmlTextWriter : XmlTextWriter
public CustomQuoteCharXmlTextWriter(Stream w, Encoding encoding) : base(w, encoding) => QuoteChar = '\'';
public CustomQuoteCharXmlTextWriter(String filename, Encoding encoding) : base(filename, encoding) => QuoteChar = '\'';
public CustomQuoteCharXmlTextWriter(TextWriter w) : base(w) => QuoteChar = '\'';
public override void WriteStartDocument()
base.WriteStartDocument();
public sealed class StringWriterWithEncoding : StringWriter
public StringWriterWithEncoding() : this(Encoding.UTF8) { }
public StringWriterWithEncoding(Encoding encoding) => this.Encoding = encoding;
public override Encoding Encoding { get; }
public static partial class XmlSerializationHelper
public static string GetOuterXml(this XmlNode node, bool indent = true)
using (var textWriter = new StringWriterWithEncoding())
using (var xmlWriter = new XmlTextWriter(textWriter) { Formatting = indent ? Formatting.Indented : Formatting.None })
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: ");