cs_cedkat
Messages postés172Date d'inscriptionmardi 7 janvier 2003StatutMembreDernière intervention 3 juin 2011
-
8 nov. 2007 à 10:03
cs_cedkat
Messages postés172Date d'inscriptionmardi 7 janvier 2003StatutMembreDernière intervention 3 juin 2011
-
9 nov. 2007 à 08:33
Bonjour,
J'ai un petit souci, je ne sais pas comment sérialisé en binaire une collection pesonnalisée en utlisant la sérialisation personnalisé.
Voici ma classe :
[Serializable()]
public
class ListPerso : CollectionBase, ISerializable{
// Constructeur spécifique à la désérialisation, permettant ainsi de contrôler les informations à déserialiser.
protected ListPerso (SerializationInfo info, StreamingContext context)
{
???
}
// Méthode spécifique à la sérialisation, permettant ansi de contrôler les informations à serialiser.
[SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter =
false)]
public
virtual
void GetObjectData(SerializationInfo info, StreamingContext context)
{
????
}
}
Voilà, je ne sais pas quoi mettre à la place des points d'inérogation afin de sérialisé le champs "F_Company " ainsi que les éléments de la collection.
Merci
Phoenix
A voir également:
[c#][VS2003] Serialisation d'une collection personnalisé
cs_cedkat
Messages postés172Date d'inscriptionmardi 7 janvier 2003StatutMembreDernière intervention 3 juin 2011 8 nov. 2007 à 14:27
Bonjour,
Merci, mais le problème n'est pas de sérialisé l'objet dans un fichier mais bien de contrôler la facon de je veux sérialiser une collection personnalisé.
cs_cedkat
Messages postés172Date d'inscriptionmardi 7 janvier 2003StatutMembreDernière intervention 3 juin 2011 8 nov. 2007 à 14:58
Bien sûr que si, tu peux contrôler la façon dont tes objest vont se sérialisé.
Il faut pour cela que l'objet implémente l'interface ISerializable et ensuite implémenter les fonctions :
-
GetObjectData (SerializationInfo info, StreamingContext context) --> pour la sérialisation
- un constructeur avec la signature suivante :
protected MonObjet(SerializationInfo info, StreamingContext context) --> pour la désérialisation .
(voir mon exemple de classe plus haut)
Tu peut ainsi redéfinir le nom de l'assembly des tes objets pour permettre la compatibilité du fichier en fonction de tes version d'assembly car par défaut la sérialization native indique la version de l'assembly.
Donc, pour en revenir à mon cas, ici le problème que je rencontre, c'est que je veux sérilisé une collection fortement typé et donc, je vois pas quoi mettre dans les dites méthodes.
cs_Nurgle
Messages postés1642Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention28 avril 20114 8 nov. 2007 à 23:35
Bonjour,
Un petit exemple simple, si tu as un seul champ dans ton objet à sérialiser :
public string maChaine = "toto";
'Tu peux définir ce que tu veux sérialiser et sous quelle forme en utilisant SerializationInfo.AddValue :
void GetObjectData (SerializationInfo info, StreamingContext context) ...
{
info.AddValue("maChaine", maChaine);
}
' Et lors du rechargement de l'objet tu peux utiliser SerializationInfo.GetString ou plus généralement SerializationInfo.GetValue :
MonObjet(SerializationInfo info, StreamingContext context)
{
this.maChaine = info.GetString("maChaine");
}
En gros ça te permet de ne sérialiser que certains membres, certaines variables, etc... et également de contrôler ce qui devra être fait ou ne pas fait lors du rechargement de l'objet.
Comme dans ton cas tu as une collection, tu peux stocker indépendamment chaque objet de ta collection, ou stocker un tableau d'objet, ou ce que tu veux...
Par contre je vois pas en quoi le fait que ta collection soit fortement typée change quoi que ce soit... tu auras juste un Cast à faire quand tu récupèreras tes données lors de la dé-sérialisation.