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 classes to be cloned are marked with [Serializable]
. I happen to have my classes (well most of them) marked with [DataContract]
because I use DataContractSerializer
to serialize into XML.
I only introduced [Serializable]
attribute because of the need for deep clone of some of these class instances. However, now something happened to serialization/deserialization via the DCS because it does not work anymore - errors about expecting a different XML element on deserialization. If I remove the [Serializable]
the errors are gone.
What are my options? I just want to deep clone my objects as simple as possible.
This works
public static T DeepClone<T>(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);
}
}