Probleme de serialization xml [Résolu]

Messages postés
3
Date d'inscription
mardi 13 octobre 2009
Statut
Membre
Dernière intervention
2 novembre 2011
- - Dernière réponse : Alyaks973
Messages postés
3
Date d'inscription
mardi 13 octobre 2009
Statut
Membre
Dernière intervention
2 novembre 2011
- 2 nov. 2011 à 13:41
Bonjour à tous !

J'ai un petit soucis avec une séquence de sérialization dans mon application.

Pour commence ril s'agit d'une appli pour Windows Phone 7 (donc silverlight blablabla)

Le passage qui me pose soucis :

Je souhaite charger le contenu d'un xml contenant des données, mon xml est bien formé au départ (sisi j'ai vérifier), je deserialize mes données, il s'agit d'objets "datas" que je met dans une List<datas> tout simplement.

Avec ma liste je test si elle contient bien le nom que je cherche (la réponse est forcément oui puisque j'ai utilisé ce meme xml avant pour en arriver à vouloir supprimer l'objet. Quand je le trouve je le vire de ma list puis je serialize ma nouvelle liste toute propre sans l'objet que j'ai supprimé. Et la paf, mon xml est mal formé car il contient bien ma liste sans l'objet mais apres le root node qui ferme le xml "" il y a le dernier objet de ma liste qui à été rajouté... Incompréhensible !

Ci dessous la séquence de deserialization/serialization :

private void deleteButton_Click(object sender, System.EventArgs e)
        {
            using (IsolatedStorageFile myIsolatedStorage =  IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (IsolatedStorageFileStream streamReader = myIsolatedStorage.OpenFile("newData.xml", FileMode.Open))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(List<datas>));

                    List<datas> data = (List<datas>)serializer.Deserialize(streamReader);

                    streamReader.Close();

                    // Write to the Isolated Storage
                    XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
                    xmlWriterSettings.Indent = true;

                    using (IsolatedStorageFileStream streamWriter = myIsolatedStorage.OpenFile("newData.xml", FileMode.Open))
                    {
                        using (XmlWriter xmlWriter = XmlWriter.Create(streamWriter, xmlWriterSettings))
                        {
                            for (int i = 0; i < data.Count; i++)
                            {
                                if ((data[i].name == birthdayNameBlock.Text) && (data[i].birthday == Convert.ToDateTime(birthdayDate.Text)))
                                    data.Remove(data[i]);
                            }
                            serializer.Serialize(xmlWriter, data);
                        }
                        streamWriter.Close();
                    }

                    Uri page = new Uri("/MainPage.xaml", UriKind.Relative);
                    NavigationService.Navigate(page);
                }
            }
        }


Ensuite un exemple de xml que je devrais obtenir apres la suppression de mon objet :

<?xml version="1.0" encoding="utf-8"?>
  <datas>
    <name>yyyyy</name>
     2011-11-01T00:00:00+01:00 
  </datas>
  <datas>
    <name>laque</name>
    2011-11-01T00:00:00+01:00
  </datas>
  <datas>
    <name>essai 2 05</name>
    2011-11-01T00:00:00+01:00
  </datas>
  <datas>
    <name>ggggggggg</name>
    2011-11-01T00:00:00+01:00
  </datas>


Et le résultat que j'obtiens en réalité :

<?xml version ="1.0" encoding="utf-8"?>
  <datas>
    <name>yyyyy</name>
    2011-11-01T00:00:00+01:00
  </datas>
  <datas>
    <name>laque</name>
    2011-11-01T00:00:00+01:00
  </datas>
  <datas>
    <name>essai 2 05</name>
    2011-11-01T00:00:00+01:00
  </datas>
  <datas>
    <name>ggggggggg</name>
    2011-11-01T00:00:00+01:00
  </datas>
   <name>ggggggggg</name>
    2011-11-01T00:00:00+01:00
  </datas>


A l'aide je ne comprend pas !

ps : apres divers test : c’est toujours le DERNIER objet de ma liste qui est écrit apres le root node fermant

Merci d'avance

Skay
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
3
Date d'inscription
mardi 13 octobre 2009
Statut
Membre
Dernière intervention
2 novembre 2011
3
Merci
Problème résolu, en fait le FileMode était en Open, du coup je n’écrasais pas la totalité des données présentes dans le fichier, c’est pourquoi je me retrouvais avec un reste de fichier en fin de xml. Il faut donc mettre le FileMode sur Create pour écraser le fichier dans a totalité.

Dire « Merci » 3

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

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

Commenter la réponse de Alyaks973
Messages postés
3
Date d'inscription
mardi 13 octobre 2009
Statut
Membre
Dernière intervention
2 novembre 2011
0
Merci
ps 2 : le code compile, l'application tourne donc si le xml initiale est bien formé, je peu ajouter autant que je veux de nom/date ça marche, si je souhaite supprimer pas de message d'erreur je suis redirigé a la page d'accueil sauf que la j'ai une erreur qui me dit que le xml est mal formé... normal ce que ce couillon de serializer écrit en fin de fichier...
Commenter la réponse de Alyaks973