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

Dotnet Discussion :

[C# 1.1] Exception sur constructeur XmlSerializer


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Par défaut [C# 1.1] Exception sur constructeur XmlSerializer
    Bonjour à tous,

    J'utilise le XmlSerializer pour convertir des fichiers XML complexes en objets et inversement. Récemment, le format des fichiers ayant changé, j'ai regénéré les classes correspondantes via le xsd.exe.

    Depuis, l'appel au constructeur XmlSerializer objSerializer = new XmlSerializer(typeof(Machin)); génère à l'exécution des messages d'erreur du genre
    Le fichier ou l'assembly nommé XYZ.dll ou l'une de ses dépendances, est introuvable.
    XYZ étant différent à chaque fois.

    J'arrive à avoir un message d'erreur classique, toujours à l'exécution, sur une sous-classe de Machin, mais dès lors que je touche aux tags du genre [System.Xml.Serialization.XmlElementAttribute("SousMachin", typeof(SousMachin))] sur le membre incriminé pour corriger le problème, l'erreur ci-dessus réapparait.

    Merci d'avance pour votre aide, je suis clairement bloqué... N'hésitez pas à demander plus d'éclaircissements si besoin !

    Cordialement,
    hobotalker

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    C#1.1 que c'est loin!
    Ça a peut-être avoir avec ça : http://msdn.microsoft.com/en-us/libr...lshtxsd_topic6

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Par défaut
    Bonjour Guruu,

    Et oui, les parcs informatiques de certains grands groupes sont, malheureusement pour moi, complètement à la ramasse !

    J'ai lu l'article que tu linkes, et ai téléchargé l'outil XmlSerializerPrecompiler qu'il est conseillé d'utiliser : le malheureux, censé m'afficher la véritable erreur qui chiffonne le XmlSerializer, se contente de m'afficher strictement la même chose que VS 2003 (j'en vois un qui rigole au fond !).

    En tout cas, d'avance merci pour vos futures aides. Ca en devient fatigant...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Par défaut
    Je vais détailler plus précisément mon problème car en me relisant, je trouve cela relativement peu clair.

    Mon application C# .NET 1.1 sérialise et désérialise des fichiers XML. Je vais donc expliquer le schéma (très simplifié) du XML, puis vous décrire les symptômes du problème.

    Le schéma est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <ROOT>
        <WH>
            <TrucsList>
                <Truc (...) />
                <Truc (...) />
                (...)
            </TrucsList>
        </WH>
        (...)
    </ROOT>
    En conséquence, j'ai les classes ROOT, WH et TrucsList correspondantes.

    Classe ROOT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [System.Xml.Serialization.XmlRootAttribute("ROOT", Namespace="", IsNullable=false)]
    [Serializable]
    public class ROOT : ICloneable
    {
    	/// <remarks/>
    	[System.Xml.Serialization.XmlElementAttribute("WH")]
    	public WH[] WH;
     
            (...)
    }
    Classe WH :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [Serializable]
    public class WH : IDifferential, ICloneable
    {
    	[System.Xml.Serialization.XmlArrayItemAttribute(typeof(Truc), IsNullable=true)]
    	public TrucsList TrucsList;
     
    	(...)
    }
    Classe TrucsList :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [Serializable]
    public class TrucsList : ICloneable
    {
    	/// <remarks/>
    	[System.Xml.Serialization.XmlElementAttribute("Truc", typeof(Truc))]
    	public Truc[] Trucs;
     
    	(...)
    }
    La ligne de code suivante est celle qui renvoie une exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlSerializer objSerializer = new XmlSerializer(typeof(ROOT));
    Les messages d'erreur sont les suivants (en fouillant les InnerException) :
    Une erreur s'est produite lors de la réflexion du type 'Business.ROOT'.
    Une erreur s'est produite lors de la réflexion du type 'Business.WH'.
    Une erreur s'est produite lors de la réflexion du champ 'Business.TrucsList'.
    Pour les types autres que les types tableau, vous pouvez utiliser les attributs suivants*: XmlAttribute, XmlText, XmlElement ou XmlAnyElement.
    Jusque là, rien d'extrêmement choquant, bien que le XmlSerializer me prenait le membre TrucsList sans aucun souci auparavant et que seules les classes ROOT ou WH ont changé depuis. Bref, pallions au problème. C'est là que les symptômes sont étranges.

    La plupart des changements sur les "preprocessor directives" de TrucsList ou autre renvoie l'erreur suivante :
    Le fichier ou l'assembly nommé XYZ.dll ou l'une de ses dépendances, est introuvable.
    XYZ étant complètement aléatoire...


    Merci d'avance de m'aider, je suis complètement bloqué.

    J'ai visité la page http://msdn.microsoft.com/en-us/libr...lshtxsd_topic6 dans laquelle il est conseillé d'utiliser l'appli XmlSerializerPrecompiler. Cette dernière n'est d'aucune utilité puisqu'elle renvoie exactement le même message d'erreur.

    Bien cordialement,
    hobotalker

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Par défaut
    Bien.

    J'ai complètement regénéré mes classes correspondant au schéma XSD via l'outil xsd.exe, et le problème n'est plus. Je ne comprends pas pourquoi mais désormais, ça fonctionne...

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

Discussions similaires

  1. gérer les exceptions sur les constructeurs?
    Par LESOLEIL dans le forum Général Java
    Réponses: 9
    Dernier message: 15/03/2006, 10h46
  2. Réponses: 5
    Dernier message: 07/07/2005, 10h20
  3. [vb.net] exception sur monForm.Show
    Par graphicsxp dans le forum Windows Forms
    Réponses: 2
    Dernier message: 04/07/2005, 12h27
  4. Exception sur Java Web Start
    Par Le Bressan dans le forum JWS
    Réponses: 5
    Dernier message: 01/02/2005, 10h52
  5. [Tomcat] Exception sur JSP
    Par Malaussene dans le forum Tomcat et TomEE
    Réponses: 7
    Dernier message: 10/09/2004, 08h43

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