Sérialize Color

Résolu
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 - 7 nov. 2011 à 14:16
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 - 24 nov. 2011 à 15:42
Bonjour,

j'ai fouillé sur le site pour trouvé une explication à mon problème mais je n'ai rien trouvé de concluant.

J'ai vu que pour pouvoir serializer une classe il fallait respecter plusieurs choses:
- Ne pas oublier de rajouter [Serializable]
- Déclarer ses variables à sérializer en Public

C'est ce que j'ai fait et cela marche très bien pour des variables de type string ou int mais pas pour des variables de type Color ou Font...

Voici le bout de code que j'utilise pour sérializer mon Arraylist comtenant mes objets(classe Task):
XmlSerializer MySerializer = new XmlSerializer(typeof(ArrayList), new Type[] { typeof(Task) });

if(File.Exists(fichier))
{
StreamReader MyReader = new StreamReader(fichier);
myListe = (ArrayList) MySerializer.Deserialize(MyReader);
MyReader.Close();
}


Tout compile correctement mais au lancement cela me met une erreur sur l'initialisation de MySerializer...

Ne peut-on sérializer que du texte????

Merci d'avance.

Nico


A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!

3 réponses

MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
7 nov. 2011 à 14:40
Salut, tu peux sérializer tout ce que tu veux, mais il est vrai que certaines classes ne peuvent être sérialisées.
Pour palier à cela, ajoute à ta classe Task l'interface ISerializable.

Tu pourras ainsi dans ta méthode GetObjectData(SerializationInfo info, StreamingContext context),
sérializer tous tes objets.

private void GetObjectData(SerializationInfo info, StreamingContext context)
{
    info.Add("Color_A", yourColor.A);
    info.Add("Color_B", yourColor.B);
    info.Add("Color_G", yourColor.G);
    info.Add("Color_R", yourColor.R);
}


Ensuite dans ta classe Task, tu créés un constructeur comme ceci :

protected Task(SerializationInfo info, StreamingContext context)
{
    yourColor = Color.FromArgb(info.GetByte("Color_A"),
                               info.GetByte("Color_R"),
                               info.GetByte("Color_B"),
                               info.GetByte("Color_G"));
}


où yourColor représente ton instance Color. Tu as là une idée de comment pouvoir créer des classes sérializables contenant des objets non sérializable.

A toi de faire le reste...
3
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
24 nov. 2011 à 13:46
Salut,

Pour la sérial, je te conseil de convertir dans ce cas la couleur en valeur string, idem pour les infos de fonts, ainsi cela deviendra serializable et au chargement petite manip pour obtenir les données

Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
3
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 2
24 nov. 2011 à 15:42
Merci cboulas, c'est ce que j'ai fait. Ca me paraissait plus simple...


A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
0
Rejoignez-nous