using System.Collections.Generic;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO.Compression;
public string TestString { get; set; }
string TestString { get; }
public sealed class Test : ITest
public string TestString { get; set; }
public static void Test()
var serializer1 = new XmlSerializer(typeof(Test));
Console.WriteLine($"{nameof(serializer1)} created.");
var test = new ITest.Test { TestString = "Test String" };
var xml = test.ToContractXml();
var test2 = DataContractSerializerHelper.FromContractXml<ITest.Test>(xml);
Console.WriteLine($"{test2} round-tripped successfully by DataContractSerializer:\n{xml}");
var serializer2 = new XmlSerializer(typeof(ITest.Test));
Console.WriteLine($"{nameof(serializer2)} created.");
public static partial class DataContractSerializerHelper
public static string ToContractXml<T>(this T obj, DataContractSerializer serializer = null, XmlWriterSettings settings = null)
serializer = serializer ?? new DataContractSerializer(obj == null ? typeof(T) : obj.GetType());
using (var textWriter = new StringWriter())
settings = settings ?? new XmlWriterSettings { Indent = true };
using (var xmlWriter = XmlWriter.Create(textWriter, settings))
serializer.WriteObject(xmlWriter, obj);
return textWriter.ToString();
public static T FromContractXml<T>(string xml, DataContractSerializer serializer = null)
using (var textReader = new StringReader(xml ?? ""))
using (var xmlReader = XmlReader.Create(textReader))
return (T)(serializer ?? new DataContractSerializer(typeof(T))).ReadObject(xmlReader);
public static void Main()
Console.WriteLine("Environment version: {0} ({1})", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription , Environment.Version);
Console.WriteLine("Failed with unhandled exception: ");