philposer
Messages postés18Date d'inscriptionsamedi 12 février 2005StatutMembreDernière intervention10 octobre 2012
-
8 juil. 2011 à 14:16
Utilisateur anonyme -
9 juil. 2011 à 16:34
Bonjour à tous,
Tout d'abords, j'espère ne pas m'être trompé de catégorie pour mon problème. Bon je vous explique ce qui m'amène à vous demander votre aide. Je souhaite sérialiser un objet vers du xml afin de conserver les données entrée dans le logiciel. Malheureusement il y a un objet imbriqué qui possède une propriété de type list (of T) et qui pose problème à la sérialisation.
Voici mon code des objets.
Imports System.Xml.Serialization
Imports System.IO
Public Class A
Public te As List(Of B)
Public Sub add(ByVal Td As String)
te.Add(New B(Td))
End Sub
End Class
Public Class B
Public _td As String
Sub New(ByVal Td As String)
_td = Td
End Sub
End Class
Public Class frmtest
Dim c As New A
Private Sub Frmtest_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
c.add("1")
c.add("2")
End Sub
Private Sub frmtest_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
'On crée le fichier et récupère son flux
Dim FluxDeFichier As FileStream = File.Create("test.xml")
Dim Serialiseur As New XmlSerializer(GetType(A))
'Serialisation et écriture
Serialiseur.Serialize(FluxDeFichier, c)
'Fermeture du fichier
FluxDeFichier.Close()
End Sub
End Class
L'erreur obtenue est : Une erreur s'est produite lors de la réflexion du type 'AGP.A'.
Comment puis-je doc sérialiser cette class? Merci de votre aide et conseil
Cette exception se produit lorsque l'on tente d'utiliser la classe XmlSerializer pour sérialiser une classe qui n'a pas un constructeur public par défaut.
Dans ton cas, la methode add de ta classe A devra être surchargée :
Remarque : ta liste "te" doit être instanciée (new).
Public Class A
Public te As New List(Of B)
Public Sub add(ByVal Td As String)
te.Add(New B(Td))
End Sub
Sub add()
End Sub
End Class
Ainsi que pour ta classe B :
Public Class B
Public _td As String
Sub New(ByVal Td As String)
_td = Td
End Sub
Sub New()
End Sub
End Class
Dim c As New A
Dim Deserialiseur As New XmlSerializer(GetType(A))
Dim FluxDeFichier As New StreamReader("test.xml")
c = CType(Deserialiseur.Deserialize(FluxDeFichier), A)
FluxDeFichier.Close()