Comment mettons l'attribut Serializable à une classe ??
Euh ... sans rire, ta question c'est un peu comme demander comment met-on le "else" dans un "if..else"
C'est très compliqué :
Pour la façon de faire en VB, voire avec les VBistes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 [Serializable] public class MyClass { }![]()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <Serializable()> _ Public Class MyClassSerializable End Class![]()
OK merci, je test dans la journée.![]()
Attention, il n'est pas impossible que tes classes ne soit pas sérialisables; elle vont, peut être, nécessiter des modifications.
Si c'est le cas, je considére (mais c'est une vue personelle) que c'est une faute de design : j'estime que les composants métiers doivent être persistables.
Toujours la même erreur ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Impossible de sérialiser l'état de session. En mode 'StateServer' et 'SQLServer', ASP.NET sérialise les objets d'état de session, et par conséquent, les objets non sérialisables ou les objets MarshalByRef ne sont pas autorisés. La même restriction s'applique si une sérialisation similaire est effectuée par le magasin d'état de session personnalisé en mode 'Personnalisé'. Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code. Détails de l'exception: System.Web.HttpException: Impossible de sérialiser l'état de session. En mode 'StateServer' et 'SQLServer', ASP.NET sérialise les objets d'état de session, et par conséquent, les objets non sérialisables ou les objets MarshalByRef ne sont pas autorisés. La même restriction s'applique si une sérialisation similaire est effectuée par le magasin d'état de session personnalisé en mode 'Personnalisé'.
Pourtant j'ai mis cela dans mes classes
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <Serializable()> _ Public Class GestionMachine
Dans le code de mes pages je fais ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <Serializable()> _ Public Class GestionCaddie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Dim Panier as GestionCaddie = Session("PANIER") Panier.(...) 'Actions diverses Session("PANIER") = Panier
Visiblement tes classes ne sont pas sérialisables.
Peux tu poster, non pas le code de ta classe, mais la liste compléte des membres et les signatures de méthode ?
Tu voix quoi par "liste compléte des membres et les signatures de méthode" ?
Euh ... dans une classe t'as des methodes et des membres non ? (plus eventuellement des classes internes et des enum, mais bon ...)
Donc je te demande de poster la liste des membres (c'est leur type qui m'interesse) et les signatures de méthodes (pas l'implémentation, je m'en bas les b..nes). Désolé, je ne vois vraiment pas comment je pourrais exprimer autrement quelque chose d'aussi trivial.
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
20
21
22
23 Option Strict On Public Class GestionMachine Public Structure unComposant Public vListeComposants As ArrayList Public Sub New() Public Sub AjouteComposant(ByVal pIdCompo As Integer, ByVal pCode As String, ByVal pLibelle As String, ByVal pStock As Integer, ByVal pPrix As Double, ByVal pMontage As Double, ByVal pFiltre As ArrayList, ByVal pValeurDDL As String, ByVal pNomCompo As String, ByVal pIncomp As Boolean, Optional ByVal pNumCmd As String = "") Public Function SupprimeComposant(ByVal pIdCompo As Integer, Optional ByVal pNumCmd As String = "") As Boolean Public Function RecuperationComposant(ByVal pIdCompo As Integer) As unComposant Public Function RecuperationListe() As ArrayList Public Sub EffaceListe() Public Sub ModifPrixCompo(ByVal pIdCompo As Integer, ByVal pPrix As Double, Optional ByVal pNumCmd As String = "") End Class
Ok, je soupçonne le contenu de ton arrayList de ne pas être sérialisable.
Accessoirement, pourquoi n'utilises tu pas des génériques plutôt que ces verrues du 1.1 ?
Le plus simple : instancie un de tes objets dans une appli console à part, et sérialize le, même en xml; ainsi tu verras pourquoi il ne serialize pas.
Que contient ta struct ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Public Structure unComposant Dim ... As Integer Dim ... As String Dim ... As String Dim ... As Integer Dim ... As Double Dim ... As Double Dim ... As ArrayList Dim ... As String Dim ... As String Dim ... As Boolean End Structure
J'arrive, j'arrive (je ne me connecte jamais le WE, j'ai d'autres occupations).
Que contiennent tes ArrayList ?
As tu essayé ce que je t'ai suggéré, en l'occurence sérialiser "à part" une des instances pour y voir plus clair du pourquoi du refus de sérialiser par le système ?
Travailes tu en .net 2.0 (ou plus) ou 1.1 ? si tu travailles en 2.0, pourquoi ne pas utiliser les listes génériques (typées) ? il est possible que les listes "à tout faire" ne puissent être sérialisées (je n'en sais rien, ça fait trop longtemps que je ne touche plus au 1.1 et donc n'en utilise plus).
Je travaile en .Net 2.0
Modifier le code de ma classe de cette façon m'est impossible à cause du temps que cela va prendre (c'est pas moi qui décide de cela)
Ok, et pour le reste des questions ? (accessoirement, pour répondre à ton argument "temps", il faudrait voir combien de temps ça va prendre pour régler le problème sans modifier la classe - ça peut être assez gratiné: je te rapelle que tu as posé ton problème le 6/12)
Partager