1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
//////////////////////////////////////////////////////////////////////////////////////////////
// CONVERTIT N'IMPORTE QUEL OBJET EN TABLEAU D'OCTETS //
//////////////////////////////////////////////////////////////////////////////////////////////
//--------------------------------------------------------------------------------------------
// Permet de convertir n'importe quel objet en un tableau d'octets pouvant être stocké dans
// un champ de type BLOB.
// L'objet peut être également un tableau d'objets de type de base, ou personnel (classe etc)
// La technique s'appelle le Marshalling
//--------------------------------------------------------------------------------------------
/// <summary>Transforme un objet ou un tableau d'objets en un tableau d'octets qui le représente</summary>
/// <param name="objet">L'objet à sérialiser en tableau d'octets</param>
/// <returns>Retourne le tableau d'octets</returns>
//--------------------------------------------------------------------------------------------
public static byte[] ObjetToTableau(this Object objet)
{
if (objet == null) return null; // si on ne passe rien, on renvoie null
var bf = new BinaryFormatter(); // créer un objet de conversion
var ms = new MemoryStream(); // créer un flux de fichier mémoire
bf.Serialize(ms, objet); // sérialise l'objet en mémoire
var result = ms.ToArray(); // transforme la mémoire en un tableau d'octets
ms.Close(); // ferme le flux mémoire.
return result; // retourne le tableau
}
//////////////////////////////////////////////////////////////////////////////////////////////
// CONVERTIT UN TABLEAU D'OCTETS EN UN OBJET //
//////////////////////////////////////////////////////////////////////////////////////////////
//--------------------------------------------------------------------------------------------
// Permet de convertir un tableau d'octets représentant un objet en l'objet initial
// La technique s'appelle le Unmarshalling
//--------------------------------------------------------------------------------------------
/// <summary>Retransforme un tableau d'octets représentant un objet en l'objet de base sérialisé</summary>
/// <param name="tableau">Le tableau d'octets représentant l'objet sérialisé</param>
/// <returns>Retourne l'objet représenté, à caster par la méthode appelante dans le bon format</returns>
//--------------------------------------------------------------------------------------------
public static Object TableauToObjet(this byte[] tableau)
{
if (tableau == null) return null; // si on ne passe rien, on renvoie null
var bf = new BinaryFormatter(); // créer un objet de consersion
var ms = new MemoryStream(); // créer un flux de fichier mémoire
Object result; // l'objet de destination (sera casté par la méthode appelée)
ms.Write(tableau, 0, tableau.Length); // écrire le tableau en mémoire
ms.Position = 0; // Repointer au début de la mémoire
result = bf.Deserialize(ms) as object; // désérialise la mémoire dans l'objet
return result; // retourne l'objet désérialisé
} |
Partager