using System.Runtime.Serialization.Formatters.Binary;
using System.Diagnostics;
using System.Xml.Serialization;
public static void Main()
Person per = new Person();
var stopWatch = new Stopwatch();
byt = (new SampleBinarySerializer<Person>()).Serialize(per);
Console.WriteLine("Binary Serialize: "+stopWatch.Elapsed.TotalMilliseconds+"ms");
var man = (new SampleBinarySerializer<Person>()).Deserialize(byt);
Console.WriteLine("Binary Deserialize: "+stopWatch.Elapsed.TotalMilliseconds+"ms");
}catch(Exception ex){Console.WriteLine(ex.Message);}
byt = (new SampleJsonSerializer<Person>()).Serialize(per);
Console.WriteLine("Newtonsoft.Json Serialize: "+stopWatch.Elapsed.TotalMilliseconds+"ms");
var jsonMan = (new SampleJsonSerializer<Person>()).Deserialize(byt);
Console.WriteLine("Newtonsoft.Json Deserialize: "+stopWatch.Elapsed.TotalMilliseconds+"ms");
byt = (new SampleXmlSerializer<Person>()).Serialize(per);
Console.WriteLine("XML Serialize: "+stopWatch.Elapsed.TotalMilliseconds+"ms");
var xmlMan = (new SampleXmlSerializer<Person>()).Deserialize(byt);
Console.WriteLine("XML Deserialize: "+stopWatch.Elapsed.TotalMilliseconds+"ms");
public interface ISerializer<T> where T : class
byte[] Serialize(T objectToSerialize);
T Deserialize(byte[] arrayToDeserialize);
public class SampleBinarySerializer<T> : ISerializer<T> where T : class
public T Deserialize(byte[] arrayToDeserialize)
BinaryFormatter binaryFormatter = new BinaryFormatter();
using (MemoryStream memoryStream = new MemoryStream(arrayToDeserialize))
return binaryFormatter.Deserialize(memoryStream) as T;
public byte[] Serialize(T objectToSerialize)
BinaryFormatter binaryFormatter = new BinaryFormatter();
using (MemoryStream memoryStream = new MemoryStream())
binaryFormatter.Serialize(memoryStream, objectToSerialize);
return memoryStream.ToArray();
public class SampleJsonSerializer<T> : ISerializer<T> where T : class
public T Deserialize(byte[] arrayToDeserialize)
return JsonConvert.DeserializeObject<T>(Encoding.Default.GetString(arrayToDeserialize));
public byte[] Serialize(T objectToSerialize)
return Encoding.Default.GetBytes(JsonConvert.SerializeObject(objectToSerialize));
public class SampleXmlSerializer<T> : ISerializer<T> where T : class
public T Deserialize(byte[] arrayToDeserialize)
using (var memStream = new MemoryStream(arrayToDeserialize))
return new XmlSerializer(typeof(T)).Deserialize(memStream) as T;
public byte[] Serialize(T objectToSerialize)
using (var memStream = new MemoryStream())
new XmlSerializer(typeof(T)).Serialize(memStream, objectToSerialize);
return memStream.ToArray();
public String Personality { get; set; }
public Guid Id { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
public DateTime DOB { get; set; }
public Son son { get; set; }
public class Son : Mother
public Guid Id { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
public DateTime DOB { get; set; }