[C#] Déserialisation d'objets
Bonjour,
J'utilise des classes sérialisables pour l'enregistrement du paramétrage de mon application :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| /// <summary>
/// Enregistre les données du paramètrage
/// </summary>
public void enregistrer()
{
// Mise à jour de l'état du paramétrage
verifierParametragePasserelle();
// Enregistrement du paramétrage
String nomFichier = new StringBuilder(Application.RepertoireApplication).Append(Constantes.REPERTOIRE_DONNEES).Append("\\parametrageAcheterLouerFr.bin").ToString();
Stream fluxSortie = File.Open(nomFichier, FileMode.OpenOrCreate);
BinaryFormatter sortie = new BinaryFormatter();
sortie.Serialize(fluxSortie, this);
fluxSortie.Close();
}
/// <summary>
/// Charge le dernier paramètrage enregistré
/// </summary>
/// <returns>Paramètrage (null en cas d'erreur)</returns>
public static Parametrage charger()
{
try
{
String nomFichier = new StringBuilder(Application.RepertoireApplication).Append(Constantes.REPERTOIRE_DONNEES).Append("\\parametrageAcheterLouerFr.bin").ToString();
if (File.Exists(nomFichier))
{
Stream fluxEntree = File.OpenRead(nomFichier);
BinaryFormatter entree = new BinaryFormatter();
Parametrage parametrage = (Parametrage)entree.Deserialize(fluxEntree);
fluxEntree.Close();
return parametrage;
}
else
return new Parametrage();
}
catch (Exception e)
{
Evenement.enregistrerEvenement(System.Diagnostics.TraceEventType.Error, ConstantesEvenements.ERREUR_TRAITEMENT, "Parametrage.charger", e);
return null;
}
} |
Si tout fonctionne bien quand je lance l'application à partir de VS 2005, la désérialisation ne fonctionne plus lorsque j'ai installé l'application et que je l'utilise en dehors de VS 2005. J'obtiens l'erreur suivante lors de la désérialisation :
Parametrage.chargerImpossible d'effectuer un cast d'un objet de type 'Package.Metiers.Parametrage' en type 'Package.Metiers.Parametrage'.
à Package.Metiers.Parametrage.charger()
Je ne comprends pas pourquoi il ne peut pas charger un objet qu'il a lui même créé plus tôt ...
Petite remarque : toutes mes classes sérialisables et qui ne fonctionnent pas sont dans des fichiers dll inclus dans la répertoire racine de mon application.