none
Formulaire non marqué comme sérialisable RRS feed

  • Question

  • Bonjour,

    Depuis ce matin mon appli winform en VB (framework 4.0) ne fonctionne plus.

    en fait le formulaire principal démarre normalement.

    C'est au moment d'un binding, n'importe lequel que le message ci dessous apparait.

    Le type 'CaSoft.Regul2011.UI.FrmCommandFic2' dans l'assembly 'UIWinRegulation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' n'est pas marqué comme sérialisable.

    Je ne vois pas comment debugger ce problème.

    Merci pour votre aide


    dimanche 29 juillet 2012 22:27

Toutes les réponses

  • Bonjour,

    Ce message ce produit lorsque vous essayé de sérialiser un type (une classe) qui est un formulaire, ou alors un type qui fait référence à un formulaire. Il faudrait savoir si vous utilisez le mécanisme de sérialisation du .NET Framework (BinaryFormatter) ou le .NET Remoting. Si oui, pouvez-vous nous montrer le code de sérialisation (ou communication) qui poserait problème ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    lundi 30 juillet 2012 07:04
    Modérateur
  • Bonjour,

    Mon probleme est qu'en fait mon code n'utilise pas la serialisation, il se contente de binder les controles d'une winform aux proprietes d'un objet metier.

    Du coup je ne vois pas quel code je peut vous montrer.

    Merci pour votre aide

    Frederic

    mercredi 1 août 2012 18:07
  • Bonjour,

    Avez-vous une StackTrace de l'exception à nous montrer ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    mercredi 1 août 2012 22:15
    Modérateur
  • Bonjour,

    Voila ce que donne le stackTrace:

    L'exception System.Runtime.Serialization.SerializationException s'est produite
      Message=Le type 'CaSoft.Regul2011.UI.FrmCommandFic2' dans l'assembly 'UIWinRegulation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' n'est pas marqué comme sérialisable.
      Source=mscorlib
      StackTrace:
           à System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
      InnerException: 

    Merci pour votre aide

    mercredi 1 août 2012 23:02
  • Bonjour,

    Difficile de trouver d'où vient le problème.
    Avez-vous la possibilité de reproduire le problème dans un autre projet exemple et nous le soumettre ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    mercredi 1 août 2012 23:21
    Modérateur
  • Vous avez sans doute ajouté une propriété de type Entité Métier dans votre formulaire et/ou un type Entité Métier est propriété d'un contrôle contenu dans votre formulaire.

    Donc VS essaye de le sérialiser (pour générer le code de création de la form - dans form1.Designer.cs). Comme l'Entité Métier n'est pas marqué comme sérialisable, il veut pas !

    Donc si vous avez accès au code de l'Entité Métier, marquez la comme Serializable (et vérifiez également que ses propriétés et les propriétés de ses propriétés, etc. sont marqués Serializable). Recompilez et ca fonctionnera.

    Si vous n'avez pas le code de l'Entité Métier, vous allez être obligé de passer par un wrapper de l'Entité. Ex:

    public class Entity
    {
         public string Name {get;set;}
    }
    
    
    
    [Serializable]
    public class EntityWrapper
    {
         public static Create(Entity entity)
         {
              return new EntityWrapper{Name = entity.Name};
         }
    
         public Entity GetEntity()
         {
              return new Entity{Name = this.Name};
         }
         public string Name {get;set;}
    }
    


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    jeudi 2 août 2012 06:29
  • Bonjour,

    Effectivement mon formulaire declare un objet metier (serializable car s'appuyant sur le framework CSLA.net).

    Je ne comprend pas bien ce que vous entendez par :

    "...et/ou un type Entité Métier est propriété d'un contrôle contenu dans votre formulaire"

    Mais je pense que mon probleme tourne autour de cette notion d'objet metier et de serialisation.

    Pour vous aider a m'aider je peut rajouter que mon objet metier ressemble a çà:

    ObjCommand

          |------ObjContact (propriete)

                        |----------ObjAdresse (propriete)

    Le binding fonctionne bien sur les proprietes de ObjCommand

    Il fonctionne egalement sur les proprietes de ObjContact

    En revanche le binding sur n'importe quelle propriete de ObjAdresse leve l'exception:

    L'exception System.Runtime.Serialization.SerializationException s'est produite
      Message=Le type 'CaSoft.Regul2011.UI.FrmCommandFic2' dans l'assembly 'UIWinRegulation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' n'est pas marqué comme sérialisable.
      Source=mscorlib
      StackTrace:
           à System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
      InnerException:

    Merci pour votre aide

    Frederic

    jeudi 2 août 2012 21:00