Sérialize Color [Résolu]

Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
- - Dernière réponse : 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!!!!!!!!!
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
269
Date d'inscription
lundi 1 mars 2004
Statut
Membre
Dernière intervention
19 avril 2012
10
3
Merci
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...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 186 internautes nous ont dit merci ce mois-ci

Commenter la réponse de MasterShadows
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
11
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 186 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cboulas
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
0
Merci
Merci cboulas, c'est ce que j'ai fait. Ca me paraissait plus simple...


A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Commenter la réponse de cs_thebigboss