IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

NullReferenceException avec type.GetConstructor


Sujet :

VB.NET

  1. #1
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut NullReferenceException avec type.GetConstructor
    Bonjour,

    J'ai des fichiers XML, des classes correspondant et j'aimerais faire une méthode qui me charge automatiquement une (ou plusieurs) classe à partir d'un XML.

    J'ai déjà commencé:

    test.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
    <root obj="ClassLibrary1.Class1">
    	<Plop>Ploup</Plop>
    	<Plop>Plip</Plop>
    	<Plop>Plap</Plop>
    	<Plip>2</Plip>
    	<Plaps obj="ClassLibrary1.Class2">
    		<Plap>2</Plap>
    	</Plaps>
    </root>

    Class1.vb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Class Class1
     
        Public Property Plop As List(Of String)
        Public Property Plip As Int32
        Public Property Plaps As Class2
     
    End Class
    Module1.vb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Dim obj As Object = AppDomain.CurrentDomain.CreateInstance("ClassLibrary1", className).Unwrap
     
    Dim props As PropertyInfo() = obj.GetType.GetProperties
     
    For Each prop As PropertyInfo In props
         Dim value = Nothing
     
         Dim prop_type As Type = prop.PropertyType
     
         'ici, j'aimerais que value prenne le type de la PropertyInfo..
         'j'ai essayé:
         '
         'value = prop_type.GetConstructor(New System.Type() {}).Invoke(New Object() {}) 
         'mais exception de type NullReferenceException (sauf pour la liste..)
    Next
    La liste se charge,
    la class2 se charge,
    mais NullReferenceException pour les types Integer et String (j'en ai pas essayé d'autres pour le moment) et prop_type isnot nothing (j'ai vérifié!)

    Je ne sais pas trop comment faire.. auriez-vous une idée?

    ps: j'ai un peu épuré le code dans le module1 pour vous donc n'ayez pas peur si il manque des conditions, etc.
    J’ai des questions à toutes vos réponses!

  2. #2
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Il y a beaucoup plus simple que de regarder chaque valeur de ton XML.

    Chaque classe en vb.net peuvent être sérializable.

    Fait des recherches la dessus et tu verras, en une fonction tu pourras transformer un objet en XML et inversement.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    On dirait que tu es en train de réinventer la sérialisation XML

    Ton schéma XML est figé, ou tu peux le modifier ? Si tu peux y a apporter une petite modif (remplacer <root obj="ClassLibrary1.Class1"> par <Class1>), c'est très facile à gérer avec la sérialisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Public Class Class1
        <XmlElement("Plop")>
        Public Property Plop As List(Of String)
        Public Property Plip As Int32
        Public Property Plaps As Class2 
    End Class
     
    Public Class Class2
        Public Property Plap As Int32
    End Class
     
    ...
     
     
    Dim xs As New XmlSerializer(GetType(Class1))
    Using fs = File.OpenRead(fileName)
        Dim obj = DirectCast(xs.Deserialize(fs), Class1)
    End Using
    Plus de détails dans ce tuto (c'est en C#, mais c'est facilement transposable en VB.NET, avec ce convertisseur par exemple)

  4. #4
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Bonjour à vous,

    pour préciser le contexte, j'ai une petite semaine de répis et j'aimerais en profiter pour revoir la conception de mon appli (j'aime bien faire les choses à l'envers ) et la je suis sur la couche d’accès aux données..

    J'aimerais me faire une petite dll qui me permettrais de lire/écrire n'importe quel fichier XML sans avoir à utiliser XPath ou autre parser.
    Le top serait avec des entities et entityfactories, que j'ai déjà utiliser en java pour des bdd.

    Je pense que je me suis perdu à un moment donné car je connaissais la sérialisation mais ca m'était même pas venu à l'esprit xD

    Je vais réfléchir à ce que je veux vraiment faire, et voir si la sérialisation résout mes problèmes..

    Merci de m'avoir ramener à la raison

    -N4w4k-
    J’ai des questions à toutes vos réponses!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. appel DLL C++ en Delphi (pb avec type)
    Par fkerbourch dans le forum Langage
    Réponses: 7
    Dernier message: 11/07/2005, 17h31
  2. Réponses: 9
    Dernier message: 06/07/2005, 14h20
  3. arrondi avec type double
    Par la drogue c'est mal dans le forum MFC
    Réponses: 6
    Dernier message: 08/04/2005, 17h51
  4. [prog dynamique]Constructeur avec type primitif
    Par -=Spoon=- dans le forum Langage
    Réponses: 2
    Dernier message: 16/12/2004, 10h33
  5. Probleme avec type de donnees
    Par kevinss dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 15h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo