Sérialisation (binaire) object, image, class ...

Contenu du snippet

C'est une petite classe qui permet de sérialiser un Object, Avec quelques exemples d'utilisation.

Source / Exemple :


//**************************************************************
// classe de test
//**************************************************************
[Serializable]
public class clsTest
{
    //Varaibles Sauvergardées
    public String _sNom;
    public DataTable _dtVal;
    [NonSerialized]
    //Varaibles non Sauvergardées
    public String _sVaraible;
}
//**************************************************************
// Exemples d'utilisation
//**************************************************************
// **** Pour un datatable ****
// Sérialisation
DataTable dt = new DataTable();
dt.Columns.Add("Test1");
dt.Columns.Add("Test2");
dt.Columns.Add("Test3");
dt.Rows.Add("1;2;3".Split(';'));
dt.Rows.Add("4;5;6".Split(';'));
Serialisation.Save("Test.dt", dt);
// Désérialisation
DataTable dt2 = (DataTable)Serialisation.Load("Test.dt");
dataGridView1.DataSource = dt2;

// **** Pour une image ****
// Sérialisation
Bitmap btp1 = new Bitmap(@"Image.jpg");
Serialisation.Save("Test.image", btp1);
// Désérialisation
Bitmap btp2 = (Bitmap)Serialisation.Load("Test.image");
btp2.Save("test.jpg");

// **** Pour une classe ****
// Sérialisation
clsTest test = new clsTest();
test._sNom = "Test3";
test._dtVal = new DataTable();
test._dtVal.Columns.Add("tr12uc");
test._dtVal.Columns.Add("c3ruc");
test._dtVal.Rows.Add("1;2".Split(';'));
test._dtVal.Rows.Add("4;5".Split(';'));
Serialisation.Save("Test.test", test);
// Désérialisation
clsTest test2 = (clsTest)Serialisation.Load("Test.test");
dataGridView2.DataSource = test2._dtVal;

//**************************************************************
// Classe de Sérialisation
//**************************************************************
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

public static class Serialisation
{
    public static Boolean Save(String sNom, Object oObj)
    {
        Boolean _bRet = false;
        BinaryFormatter bf = new BinaryFormatter();
        FileStream fs = null;
        FileInfo _Fi = null;
        FileInfo _FiTemp = null;
        try
        {
            String sFileName = sNom;
            String sFileNameTemp = sNom + ".sav";
            _Fi = new FileInfo(sFileName);
            _FiTemp = new FileInfo(sFileNameTemp);

            //si fichier existe on cree une sauvegarde au cas ou :D
            if (_Fi.Exists)
                _Fi.CopyTo(_FiTemp.FullName, true);

            fs = new FileStream(sFileName, FileMode.Create);
            bf.Serialize(fs, oObj);
            fs.Close();
            _bRet = true;
        }
        catch (Exception ex)
        {
            if (fs != null)
                fs.Close();
            //si plantage lors de la sauvegarde on remplace le fichier par la sauvegarde !
            if (_FiTemp.Exists)
                _FiTemp.CopyTo(_Fi.FullName, true);
            _bRet = false;
        }
        return _bRet;
    }

    public static Object Load(String sFile)
    {
        Object oRet;
        FileStream fs = null;
        try
        {
            fs = new FileStream(sFile, FileMode.Open);

            BinaryFormatter bf = new BinaryFormatter();
            oRet = (Object)bf.Deserialize(fs);
            fs.Close();
            
        }
        catch
        {
            if (fs != null)
                fs.Close();
            oRet = null;
        }
        return oRet;
    }
}

Conclusion :


c'est ma première source soyez indulgent ^^

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.