<p>I want a true deep copy. In Java, this was easy, but how do you do it in C#?</p>

Important Note
BinaryFormatter
has been deprecated, and will no longer be available in .NET after November 2023.  See
BinaryFormatter Obsoletion Strategy
I've seen a few different approaches to this, but I use a generic utility method as such:
```
```
public static T DeepClone<T>(this T obj)
{
 using (var ms = new MemoryStream())
 {
   var formatter = new BinaryFormatter();
   formatter.Serialize(ms, obj);
   ms.Position = 0;

   return (T) formatter.Deserialize(ms);
 }
}
```
```
Notes:
Your class MUST be marked as
```
[Serializable]
```
for this to work.
Your source file must include the following code:
```
```
using System.Runtime.Serialization.Formatters.Binary;
 using System.IO;
```
```