Serealisation object imbriqué [Résolu]

Messages postés
18
Date d'inscription
samedi 12 février 2005
Dernière intervention
10 octobre 2012
- - Dernière réponse :  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
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
3
Merci
Salut,

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


Et bonne nuit

Merci Utilisateur anonyme 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
1
Merci
Pour désérialiser :
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()

Bonne soirée.
Commenter la réponse de Utilisateur anonyme
Messages postés
18
Date d'inscription
samedi 12 février 2005
Dernière intervention
10 octobre 2012
0
Merci
Merci beaucoup pour l'information, il fallait le savoir

En tout cas ça marche parfaitement maintenant

Reste plus qu'à teste la deserealisation.
Commenter la réponse de philposer

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.