using System.Collections;
using System.Globalization;
using System.Runtime.Serialization;
using KGySoft.Serialization;
public static void Main()
Console.WriteLine("Object1: " + Dump(object1));
Console.WriteLine("Object2: " + Dump(object2));
using (var ms1 = new MemoryStream())
using (var ms2 = new MemoryStream())
formatter = new BinarySerializationFormatter();
formatter.Serialize(ms1, object1);
formatter.Serialize(ms2, object2);
Console.WriteLine("Swapping Object1 and Object2 without using a temp variable.");
for (int i = 0; i < l1; i++)
using(var ms1 = new MemoryStream())
using(var ms2 = new MemoryStream())
object deserialized1 = formatter.Deserialize(ms1);
object deserialized2 = formatter.Deserialize(ms2);
Console.WriteLine("Object1: " + Dump(deserialized1));
Console.WriteLine("Object2: " + Dump(deserialized2));
private static string Dump(object o)
var convertible = o as IConvertible;
return convertible.ToString(CultureInfo.InvariantCulture);
var enumerable = o as IEnumerable;
return "[" + String.Join(", ", enumerable.Cast<object>().Select(Dump)) + "]";
return "[" + String.Join("; ", o.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Select(p => String.Format("{0} = {1}", p.Name, Dump(p.GetValue(o))))) + "]";