Sérialisation d'une classe
Hamster18
Messages postés
176
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'essaye de sérialiser les données d'un document ListEp dans BiblioEpisode ( une classe qui contient une liste d'épisode), une erreur du type : "System.ArgumentNullException : 'La valeur ne peut pas être null.
Nom du paramètre : value'" survient pour mon numéro d'épisode et mon bool Etat. Je ne voit pas comment corriger cette faute car j'ai fait des rechercher et je n'ai trouvé que la fonction
Comme ça fonctionnait pas j'ai tenter
Merci d'avance pour vos réponses.
Voici les détail du code :
Dans la classe Episode:
Dans la classe XMLCreationSauvegarde
L'interface IPersistanceEpisode
dans App.xaml
Dans le code C# de la window ou je chage la bibliothèque pour travailler dessus :
J'essaye de sérialiser les données d'un document ListEp dans BiblioEpisode ( une classe qui contient une liste d'épisode), une erreur du type : "System.ArgumentNullException : 'La valeur ne peut pas être null.
Nom du paramètre : value'" survient pour mon numéro d'épisode et mon bool Etat. Je ne voit pas comment corriger cette faute car j'ai fait des rechercher et je n'ai trouvé que la fonction
NumEpisode = reader.ReadElementContentAsInt("numEpisode", "");
Comme ça fonctionnait pas j'ai tenter
NumEpisode = int.Parse(reader["numEpisode"]);mais l'erreur reste ... Pourriez vous m'aider s'il vous plait ?
Merci d'avance pour vos réponses.
Voici les détail du code :
Dans la classe Episode:
public class Episode : Identification, IDataErrorInfo, INotifyPropertyChanged, IXmlSerializable { // pour que le code soit plus léger, je ne met pas les constructeur .... public XmlSchema GetSchema() { throw new NotImplementedException(); } public void ReadXml(XmlReader reader) { //NumEpisode = reader.ReadElementContentAsInt("numEpisode", ""); //NumEpisode = int.Parse(reader["numEpisode"]); reader.ReadToFollowing("date"); Nom = reader["nom"]; IdSaison = reader["idSaison"]; IdSerie = reader["idSerie"]; Video = reader["video"]; Etat = bool.Parse(reader["etat"]); } public void WriteXml(XmlWriter writer) { writer.WriteElementString("numEpisode", NumEpisode.ToString()); writer.WriteElementString("nom", Nom.ToString()); writer.WriteElementString("idSerie", IdSerie.ToString()); writer.WriteElementString("idSaison", IdSaison.ToString()); writer.WriteElementString("video", Video.ToString()); writer.WriteElementString("etat", Etat.ToString()); }
Dans la classe XMLCreationSauvegarde
public class XMLCreationSauvegarde : IPersistanceEpisode { public ObservableCollection<Episode> ListEp() { XmlSerializer BiblioEpisode = new XmlSerializer(typeof(ObservableCollection<Episode>)); ObservableCollection<Episode> BiblioEpisode1; //désérialisation using (Stream stream = File.OpenRead("ListEp.xml")) { BiblioEpisode1 = BiblioEpisode.Deserialize(stream) as ObservableCollection<Episode>; } return BiblioEpisode1; } public void SauvegardeBiblioEpisode(ObservableCollection<Episode> listEp) { XmlSerializer BiblioEpisode1 = new XmlSerializer(typeof(ObservableCollection<Episode>)); //sérialisation using (Stream stream = File.Create("ListEp.xml")) { BiblioEpisode1.Serialize(stream, listEp); } }
L'interface IPersistanceEpisode
public interface IPersistanceEpisode { ObservableCollection<Episode> ListEp(); void SauvegardeBiblioEpisode(ObservableCollection<Episode> ListEp); }
public class BiblioEpisode : INotifyPropertyChanged { public BiblioEpisode() { ListEpisodes = GetAll(); } public ObservableCollection<Episode> ListEpisodes { get; set; }
public class Manager //Voici la classe Manager, cette dernier permet de gérer l'ensempble des fonctionnalité de l'application sans que l'utilisateur n'est besoin d'appeller directement les méthose depuis le projet biblioDeClasse { private XMLCreationSauvegarde xMLCreationSauvegarde; BiblioSaison BiblioSaison { get; set; } = new BiblioSaison(); BiblioEpisode BiblioEpisode { get; set; } = new BiblioEpisode(); Utilisateur Utilisateur { get; set; } IPersistanceUtilisateur PersistanceU { get; set; } IPersistanceEpisode PersistanceE { get; set; } IPersistanceSerie PersistanceS { get; set; } //ici les persistance U et S ne sont pas utiliser public Manager (IPersistanceEpisode persistanceE, IPersistanceSerie persistanceS, IPersistanceUtilisateur persistanceU) { this.PersistanceE = persistanceE; this.PersistanceU = persistanceU; this.PersistanceS = persistanceS; } public Manager(XMLCreationSauvegarde xMLCreationSauvegarde) { this.xMLCreationSauvegarde = xMLCreationSauvegarde; } public void SauvegarderEpisode(ObservableCollection<Episode> ListEp) { IPersistanceEpisode persistanceEpisode = new XMLCreationSauvegarde(); persistanceEpisode.SauvegardeBiblioEpisode(ListEp); } public ObservableCollection<Episode> LireListeEpisode() { return BiblioEpisode.ListEpisodes=PersistanceE.ListEp(); } }
dans App.xaml
public partial class App : Application { private static readonly IPersistanceEpisode persistanceE = new XMLCreationSauvegarde(); private static readonly IPersistanceSerie persistanceS = new XMLCreationSauvegarde(); private static readonly IPersistanceUtilisateur persistanceU = new XMLCreationSauvegarde(); //public Manager.Manager Manager = new Manager.Manager(new StubEpisode(), persistanceS, persistanceU); public Manager.Manager Manager = new Manager.Manager(persistanceE, persistanceS, persistanceU); } }
Dans le code C# de la window ou je chage la bibliothèque pour travailler dessus :
public Episode_Grey_Anatomy() { InitializeComponent(); DataContext = this; BiblioEpisode.ListEpisodes = Manager.LireListeEpisode(); } public Manager.Manager Manager { get { return (App.Current as App).Manager; } }
A voir également:
- Sérialisation d'une classe
- Classe ram - Guide
- Dans le code de la page, modifiez la couleur de fond de la classe .pix. - Forum Réseaux sociaux
- Bluetooth mercedes classe a - Forum Autoradio
- Sti2d classe poubelle - Forum Programmation
- Retrouver la liste des élèves d'une classe - Forum Loisirs / Divertissements
1 réponse
Bonjour
Je n’ai pas répondu jusque-là car je n’aime pas xmlserializer.
En effet, j’ai été confronté à des erreurs comme toi, et n’arrivant pas à m’en défaire, j’ai cherché une autre méthode.
Depuis j’utilise linq to xml.
Voici un petit tutoriel que j’ai écrit à ce sujet.
https://codes-sources.commentcamarche.net/faq/11196-linq-to-xml-c-et-vb-net
Si tu décides de changer pour linq to xml, je pourrais t’aider.
Je n’ai pas répondu jusque-là car je n’aime pas xmlserializer.
En effet, j’ai été confronté à des erreurs comme toi, et n’arrivant pas à m’en défaire, j’ai cherché une autre méthode.
Depuis j’utilise linq to xml.
Voici un petit tutoriel que j’ai écrit à ce sujet.
https://codes-sources.commentcamarche.net/faq/11196-linq-to-xml-c-et-vb-net
Si tu décides de changer pour linq to xml, je pourrais t’aider.