While googling I found a good post listing different approaches for cloning
C# Object Clone Wars
Last technique described in that blog points to Copyable Framework - generic framework for copying/cloning any objects using method extensions
The framework, written by Håvard Stranden addresses most of my requirements, except one: it does not work on Silverlight.
I came up with a simple method that serializes the original object and deserializes it to a cloned copy of it. It can be used as an extension or by implementing IClonable interface:
public static class ObjectExtensions
public static T Clone<T>(this object original)
using (MemoryStream stream = new MemoryStream())
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
stream.Position = 0;
cloned = (T)serializer.ReadObject(stream);
* This source code was highlighted with Source Code Highlighter.