Bonjour a tous,
Je suis en train de faire de la sérialisation XML avec System.Xml.Serialization sous Visual Basic .Net 2008.
Mon problème est que j'ai une classe qui contient un tableau (2 dimensions) d'objet.
Lorsque je sérialise cette classe j'ai un message « Une erreur s'est produite lors de la réflexion du type 'Cuve'».
Toute mes classes sont déclarés avec <System.Serializable()> et elles contiennent toutes un constructeur sans argument ( Public Sub New() ).
Si j'exclue le tableau de ma classe alors pas de probleme, la serialisation se passe sans probleme.
Infos. :
Le programme est assez complexe, je l'ai donc simplifié ici pour que vous n'ayez que l'essentiel du problème.
Cuve est une classe qui gere un tableau d'objet de type Cellule.
Donc probleme :
- Je crée ma cuve
- Cuve dimensionne mon tableau (grille) et le rempli d'objets Cellules
- Je serialise ensuite la cuve et le programme plante sur :
Dim serializer AsNew XmlSerializer(GetType(Cuve))
Class Cellule:
--------------
<System.Serializable()> _
Public Class Cellule
#Region "Attributs"
Private _Nom AsString ' Nom de la cellule
Private _Enabled AsBoolean ' Cellule active ?
#End Region
#Region "Proprietes"
Public Property Nom() AsString
Get
Return _Nom
End Get
Set(ByVal value AsString)
_Nom = value
End Set
End Property
Public Property Enabled() AsBoolean
Get
Return _Enabled
End Get
Set(ByVal value AsBoolean)
_Enabled = value
End Set
End Property
#End Region
#Region "Constructeurs"
Public Sub New()
End Sub
Public Sub New(ByVal Nom AsString, ByVal Active AsBoolean)
Me._Nom = Nom
Me._Enabled = Active
End Sub
#End Region
End Class
Classe Cuve
-----------
<System.Serializable()> _
Public Class Cuve
#Region "Attributs"
Private _Cellules As Cellule(,) ' Conteneur de cellules
Private _Nom AsString ' Nom de la cuve
Private _Factor AsInteger ' Nombre cellule sur un coté
#End Region
#Region "Proprietes"
Public Property Nom() AsString
Get
Return _Nom
End Get
Set(ByVal value AsString)
_Nom = value
End Set
End Property
Public Property Grille() As Cellule(,)
Get
Return _Cellules
End Get
Set(ByVal value As Cellule(,))
_Cellules = value
End Set
End Property
#End Region
#Region "Methode"
' Ajoute un objet cellule a la grille
Public Sub AjouteCellule(ByVal nom AsString, ByVal CoordX AsInteger, ByVal CoordY AsInteger)
Dim cell AsNew Cellule(nom, False)
_Cellules(CoordX, CoordY) = cell
End Sub
' Initialise la grille en la remplissant des objets cellules
Public Sub InitialiseCellules()
Dim Factor AsInteger = Me._Factor
Dim cptCell AsInteger = 0
ReDim _Cellules(_Factor, _Factor)
For x AsInteger = 0 To Factor
For y AsInteger = 0 To Factor
AjouteCellule(String.Format("ASSEMBLAGE-{0}", cptCell), x, y)
cptCell += 1
Next
Next
End Sub
#End Region
#Region "Constucteurs"
Public Sub New()
End Sub
Public Sub New(ByVal Nom AsString, ByVal Factor AsInteger)
MyClass.New()
' Nom de la cuve
Me._Nom = Nom
' Cellules de la cuve
Me._Factor = Factor
' Rempli la grille
InitialiseCellules()
End Sub
#End Region
End Class
Exemple de methode qui crée la cuve et serialise l'objet :
' Creation des objets
Dim C AsNew Cuve("Nouvelle cuve", 15) ' Crée une grille de 15 x 15 dans la cuve
Dim serializer AsNew XmlSerializer(GetType(Cuve)) ' ERREUR ICI
' Creation fichier
Dim fichier As FileStream = New FileStream("c:\temp\serialise.log", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)
' Serialisation dans le fichier
serializer.Serialize(fichier, C)
/\_/\
( o.o ) ~ ElGuevel ~
> ^ <