Un problème de sérialisation ?

Résolu
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014 - Modifié par Moundir76 le 12/08/2013 à 09:35
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014 - 13 août 2013 à 10:27
Bonjour,


(Voir edit à la fin du message)
Je réalise une application, qui, a son chargement va faire appel à la méthode LoadConf().

Cette méthode va aller prendre les variables contenues dans un fichier XML.

J'avais utilisé ce bout de code dans une autre appli sans problème mais là je sèche...


 Private Function LoadConf()
        If File.Exists("Config.xml") Then
            'Je crée ma classe « vide »
            Dim Config As New ClassConfig()

            'On ouvre le fichier et récupère son flux
            Dim FluxDeFichier As Stream = File.OpenRead("Config.xml")

            Dim Deserialiseur As New XmlSerializer(GetType(ClassConfig))

            'Désérialisation et conversion de ce qu'on récupère dans le type « ClassConfig »
            Config = CType(Deserialiseur.Deserialize(FluxDeFichier), ClassConfig)

            'Fermeture du flux
            FluxDeFichier.Close()
           

            Return Config
        Else
            Return 0
        End If

    End Function



et dans mon fichier XML j'ai :

<?xml version="1.0"?>
<ClassConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <leDirectorySRC>C:\testSRC</leDirectorySRC>
  <leDirectoryDEST>C:\testDEST</leDirectoryDEST>
 </ClassConfig>



Petit aperçu de ma classe :

Public Class ClassConfig
    Private DirectorySRC As String
    Public Property leDirectorySRC() As String
        Get
            Return DirectorySRC
        End Get
        Set(ByVal value As String)
            DirectorySRC = value
        End Set
    End Property




    Private DirectoryDEST As String
    Public Property leDirectoryDEST() As String
        Get
            Return DirectoryDEST
        End Get
        Set(ByVal value As String)
            DirectoryDEST = value
        End Set
    End Property
 Public Sub New()

    End Sub
End Class



Quand j'execute en mode pas à pas sous VS, le code va bien jusqu'a
 Config = CType(Deserialiseur.Deserialize(FluxDeFichier), ClassConfig)
, puis va dans ma ClassConfig au niveau de Public sub new(), end sub, puis plus rien, la form s"ouvre et je ne peux plus continuer l'execution du code...

Avez vous une idée ?

Cordialement

EDIT : Après plusieurs essais j'ai remarqué que cette erreur survenait car au niveau de
<leDirectorySRC>C:\testSRC</leDirectorySRC>
  <leDirectoryDEST>C:\testDEST</leDirectoryDEST>
, j'ai raccourci les path pour mettre sur le forum. En réalité, j'ai un dossier "Développement", et si il y a un accent dans la chaine de caractère alors ça "plante" (même pas car il n'y a aucune erreur, on dirait que le programme ne sait pas quoi faire alors il ne fait plus rien)....... Une idée pour l'accent ?--

1 réponse

Utilisateur anonyme
12 août 2013 à 13:00
Salut,

Ta fonction LoadConf() n'est pas typée. Elle devrait être écrite comme ceci :

 Private Function LoadConf() as ClassConfig


De plus, sur l'une de ses sorties, tu dois retourner Nothing plutôt que 0.

Pour éviter ce type d'erreur, toujours activer Option Strict dans les propriétés du projet.

Ensuite, il manque la partie de code qui récupère le résultat de ta fonction et qui exploite les données.
1
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
13 août 2013 à 10:27
Oups, en effet c'est déjà mieux comme celà !

Pour l'accent j'ai changé le nom du répertoire, et j'ai ajouté dans mon xml :
encoding="iso-8859-1"


Merci !
0
Rejoignez-nous