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

Windows Forms Discussion :

Exception lors de la sérialisation VB.NET


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2016
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Exception lors de la sérialisation VB.NET
    Bonjour,

    Dans le cadre d'un projet que j'ai repris. En vb.net un language que je ne connaissais pas avant d'y mettre les mains dedans. J'ai apporté quelques modification d'évolution classique : un champ texte par la un datetimepicker par ici ...
    Je vous fait pas tous le topo.
    Et a un moment donné j'arrive au résultat voulu. et voilà tout content je me voyait déjà arrivé super et tout.
    Et la je teste d'enregistrer ce formulaire, l'engregistement se fait a travers la sérialisation j'ai pas du tout regardé jusque la car ça marchait niquel.
    L'enregistrement génére un .machintruc lisible que par le soft en question.
    et la le drame. exception :
    System.Runtime.Serialization.SerializationException
    HResult=0x8013150C
    Message=Le type 'System.Windows.Forms.Form' dans l'assembly 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' n'est pas marqué comme sérialisable.
    Source=mscorlib
    Arborescence des appels de procédure*:
    à System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
    à System.Runtime.Serialization.FormatterServices.<>c__DisplayClass9_0.<GetSerializableMembers>b__0(MemberHolder _)
    à System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
    à System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
    à System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
    à System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, SerializationBinder binder)
    à System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)
    à System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
    à System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
    à System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph)
    à piscine.Piscine.SauveTab() dans C:\D\dev\sav_piscine\Piscine\piscine\VueAppli.vb :ligne 157
    à piscine.Piscine.EnregistrerSousToolStripMenuItem_Click(Object sender, EventArgs e) dans C:\D\dev\sav_piscine\Piscine\piscine\VueAppli.vb :ligne 184
    à System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
    à System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
    à System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
    à System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
    à System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
    à System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
    à System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
    à System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
    à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    à System.Windows.Forms.Control.WndProc(Message& m)
    à System.Windows.Forms.ScrollableControl.WndProc(Message& m)
    à System.Windows.Forms.ToolStrip.WndProc(Message& m)
    à System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    à piscine.My.MyApplication.Main(String[] Args) dans :ligne 81


    Stack trace :
    StackTrace " à System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)" & vbCrLf & " à System.Runtime.Serialization.FormatterServices.<>c__DisplayClass9_0.<GetSerializableMembers>b__0(MemberHolder _)" & vbCrLf & " à System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)" & vbCrLf & " à System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)" & vbCrLf & " à System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()" & vbCrLf & " à System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, SerializationBinder binder)" & vbCrLf & " à System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)" & vbCrLf & " à System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)" & vbCrLf & " à System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)" & vbCrLf & " à System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph)" & vbCrLf & " à piscine.Piscine.SauveTab() dans C:\D\dev\sav_piscine\Piscine\piscine\VueAppli.vb:ligne 157" & vbCrLf & " à piscine.Piscine.EnregistrerSousToolStripMenuItem_Click(Object sender, EventArgs e) dans C:\D\dev\sav_piscine\Piscine\piscine\VueAppli.vb:ligne 184" & vbCrLf & " à System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)" & vbCrLf & " à System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)" & vbCrLf & " à System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)" & vbCrLf & " à System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)" & vbCrLf & " à System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)" & vbCrLf & " à System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)" & vbCrLf & " à System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)" & vbCrLf & " à System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)" & vbCrLf & " à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)" & vbCrLf & " à System.Windows.Forms.Control.WndProc(Message& m)" & vbCrLf & " à System.Windows.Forms.ScrollableControl.WndProc(Message& m)" & vbCrLf & " à System.Windows.Forms.ToolStrip.WndProc(Message& m)" & vbCrLf & " à System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)" & vbCrLf & " à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)" & vbCrLf & " à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)" & vbCrLf & " à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)" & vbCrLf & " à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)" & vbCrLf & " à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)" & vbCrLf & " à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)" & vbCrLf & " à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)" & vbCrLf & " à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()" & vbCrLf & " à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()" & vbCrLf & " à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)" & vbCrLf & " à piscine.My.MyApplication.Main(String[] Args) dans :ligne 81" String

    Bon sachez que j'ai quand même fouiner beaucoup avant sur le web mais j'ai rien trouvé de concluant.
    Donc je me tourne vers vous les gars, les gourous du .net un peu d'aide SVP.
    Je reste bien sur à votre disposition pour tout renseignement complémentaire.

    Merci.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    la sérialisation consiste à transformer une instance de classe en string ou tableau d'octets (ton cas ici vu que c'est le binaryformatter qui est utilisé)
    tout n'est pas sérialisation aussi si tu as ajouté des choses dans la classe qui ne le sont pas ca plante (image, control comme dtpicker ...)
    le binaryformatter enregistre toutes les variables de classes
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2016
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    la sérialisation consiste à transformer une instance de classe en string ou tableau d'octets (ton cas ici vu que c'est le binaryformatter qui est utilisé)
    tout n'est pas sérialisation aussi si tu as ajouté des choses dans la classe qui ne le sont pas ca plante (image, control comme dtpicker ...)
    le binaryformatter enregistre toutes les variables de classes
    Merci Pol63 d'avoir répondu.

    Effectivement il y avait des images au préalable dans la classe et j'ai effectivement ajouté des DTpicker.
    Admettons que j'ai besoin de ces éléments dans la classe. Que me conseilles-tu ? - sérialiser autrement (éventuellement) ? Comment arrivé à sérialisé ma classe telle qu'elle malgré tout. Ou autre solution.

    D'avance merci.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    voir avec l'attribut nonserialized et/ou avoir des variables typées sur des choses plus simples que le binaryformatter saura gérer
    je crois qu'il y a aussi une interface pour spécifier comment on veut s'y prendre pour sérialiser/désérialiser permettant de mettre du code custom

    après on ne voit pas le code, si tu dis qu'il y avait des images, c'est qu'il y a déjà du code pour éviter le problème je pense, car de mémoire une image n'est pas sérialisable (à vérifier)

    aussi avoir un datetimepicker dans une classe de données c'est étrange ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2016
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Effectivement, disons que certainement la conception du projet pêche sous certains aspect. En gros j'ai pas vraiment de solution a ce problème. J'avoue ne pas bien connaître la serialisation. J'ai le même projet au stade sans dtpicker et l'image bien présene qui serialise sans problème. Donc a ce niveau là je suis échec et mat. Car pourquoi l'image serialise et dtpicker exception... Théoriquement l'image ne devrait pas être serialisé. Qu'est-ce que t'en penses ?

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    j'en pense que ca fait longtemps que j'ai pas sérialisé en windows forms
    donc ca se peut quand même qu'image passe, mais dtpicker héritant de control je suis sûr que control n'est pas sérialisable

    mais ca ne répond pas au fait qu'une classe sérialisée c'est une version rapide (~fainéante) d'un enregistrmeent de données, et qu'un datetimepicker n'est pas une données, une date l'étant
    donc que fait ce datetimepicker ici ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2016
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Et bien une question de comodité,
    Du coup j'ai modifié la classe je stoque le checked de DTPicker dans une variable boolean et renvois de la vue à la classe en question.
    Ok pas de soucis.
    Du coup plus de DTPicker dans la classe.
    Et malgré tout une exception au même endroit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -		$exception	{"Le type 'piscine.Piscine' dans l'assembly 'piscine, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null' n'est pas marqué comme sérialisable."}	System.Runtime.Serialization.SerializationException
    Le stacktrace semble plus léger ce coup-ci ??

    Merci encore

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il te dit quel type n'est pas sérializable donc tu cherches le type dans ton code et tu essaye de rajouter l'attribut <serializable> au dessus de public class xxx
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2016
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Heuuuuu
    Bonjour Pol63 et bonne année,

    Je reviens à la charge un mois après, concernant mon problème de sérialisation.
    L'attribut <Serialisable()> est sur toutes les classes que je sérialise.
    Ce qui m'échappe c'est que la sérialisation à très bien marché, je rajoute DTPicker dans la classe ça plante OK.
    Du coup j’enlève DTPicker de la classe et j'envois le checked de la vue du DTPicker dans un Bollean(le bool cela se sérialise facile..). DU coup pour moi c'est bingo. Et bien cela plante toujours au niveau de la sérialisation. L'autre élément graphique que je serialise et à toujours accepté d'être sérialisé depuis le début de vie de l'appli c'est une ou deux images.(je ne vois pas pourquoi cela merderai que maintenant)

    Merci d'avance.

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le message d'erreur t'en diras plus ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Probleme d'exception lors de sérialisation
    Par Keiii dans le forum Général Java
    Réponses: 10
    Dernier message: 29/05/2016, 15h35
  2. Réponses: 4
    Dernier message: 06/09/2005, 09h58
  3. Réponses: 9
    Dernier message: 31/05/2005, 10h05
  4. [Exception]Lors d'un validate sur un jframe
    Par cameleon2002 dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 02/05/2005, 11h27
  5. [JDBC] SQL Exception lors d'une Query !
    Par Castagnems dans le forum JDBC
    Réponses: 5
    Dernier message: 30/04/2004, 12h00

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