Sérialize Color [Résolu]

Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Dernière intervention
12 avril 2017
- 7 nov. 2011 à 14:16 - Dernière réponse :
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
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 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
269
Date d'inscription
lundi 1 mars 2004
Dernière intervention
19 avril 2012
- 7 nov. 2011 à 14:40
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...

Merci MasterShadows 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de MasterShadows
Meilleure réponse
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Dernière intervention
8 janvier 2014
- 24 nov. 2011 à 13:46
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

Merci cboulas 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cboulas
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Dernière intervention
12 avril 2017
- 24 nov. 2011 à 15:42
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

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.