Comment effectuer une copie profonde d'un objet en .NET ?

Comment effectuer une copie profonde d’un objet en .NET ?

Note importante

BinaryFormatter a ete deprecie et ne sera plus disponible dans .NET apres novembre 2023. Voir Strategie d’obsolescence de BinaryFormatter

Nous avons vu plusieurs approches differentes, mais nous utilisons une methode utilitaire generique comme suit :

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 :

Votre classe DOIT etre marquee comme [Serializable] pour que cela fonctionne.

Votre fichier source doit inclure le code suivant :

 using System.Runtime.Serialization.Formatters.Binary;
 using System.IO;