I\'ve found numerous solutions here at SO and elsewere that deal with deep clone of object via serialization/deserialization (into memory and back).
It requires that
This works
public static T DeepClone(this T a) { using (MemoryStream stream = new MemoryStream()) { DataContractSerializer dcs = new DataContractSerializer(typeof(T)); dcs.WriteObject(stream, a); stream.Position = 0; return (T)dcs.ReadObject(stream); } }