Sérialiser un objet qui contient une liste d'objets
J'ai réussit à construire un NotInheritable Serilizer que serilizes toutes mes classes, et la liste des classes, avec succès.
Jusqu'à ce que j'ai réussit à construire une liste de classe qui contient une liste de classes.
Je suis le runtime Exception: Il y a une erreur de la génération du document XML. résultant en une parfaitement XML vide 🙁
Ce sont mes classes à serilize:
<System.Serializable> _
<System.Xml.Serialization.XmlInclude(GetType(StatisticItem))> _
Public Class Statistic
Public StatItem As New list(Of StatisticItem)
'Bla bla bla
end class
<Serializable> _
Public Class StatisticItem
Private stStatPath As String = ""
Private eStatType As StatType = 0
Private iBatchNumber As Int32 = 0
end class
Et le sérialiseur:
Public NotInheritable Class XmlSerializer
Public Shared Sub Serialize(Of T)(ByVal obj As T, sConfigFilePath As String)
Dim XmlBuddy As New System.Xml.Serialization.XmlSerializer(GetType(T))
Dim MySettings As New System.Xml.XmlWriterSettings()
MySettings.Indent = True
MySettings.CloseOutput = True
Dim MyWriter As System.Xml.XmlWriter=System.Xml.XmlWriter.Create(sConfigFilePath,MySettings)
XmlBuddy.Serialize(MyWriter,obj)
MyWriter.Flush()
MyWriter.Close()
' ----- OLD CODE FOR SERIALIZE, NEXTLINE IN XML DOESNT WORK ON WIN CE -------,
' B.T.W. Using This code to serilize gives the exact same fault
'Dim XmlBuddy As New System.Xml.Serialization.XmlSerializer(GetType(T))
'Dim objStreamWriter As New StreamWriter(sConfigFilePath)
'XmlBuddy.Serialize(objStreamWriter, obj)
'objStreamWriter.Close()
End Sub
end class
Et c'est l'appel de:
XmlSerializer.Serialize(Of list(Of Statistic))(StatCollection, CommCtrl.PathStatisticFile)
Si je commente la liste dans StatisticItem tout fonctionne.
Je pense que si j'en Œuvre IXmlSerializable dans StatisticItem je peux dire le sérialiseur comment travailler pour le faire fonctionner, mais je vois d'autres exemple de code sur internet où cela fonctionne sans tous ces efforts
et je préfère une solution propre, ce qui est environ le même que tous mes autres classes.
Espère que l'un de vous les gars, vous pouvez m'aider
J'étais en train de travailler sur elle, mais maintenant je remarque que j'ai à écrire le code pour écrire tous les noms et les valeurs de Statisic et statistique des éléments. et bien sûr le code pour lire tout par la suite. Je sais il doit y avoir un moyen plus facile pour sérialiser. J'ai fait le sérialiseur comme cela, de sorte qu'il serait en mesure de reconnaître le type d'objet qu'il reçoit. Damm vous de fin de soirée Bbq
Le serialisers ne serialise
Public
propriétés (avec votre code comme il est). Ne pouvez-vous pas changer le Private
s à Public
s??J'ai essayé, je ne comprend pas les propriétés publiques dans le code. Je suis encore à essayer certaines choses maintenant, j'ai un regard nouveau, Si je ne peux pas résoudre ce matin je vais avoir à taper tout à la main avec le IXmlSerializable.. Trop mal si il y a quelqu'un avec de bons conseils, toute aide est utile.
OriginalL'auteur Rob Heijligers | 2014-08-08
Vous devez vous connecter pour publier un commentaire.
Oui résolu!, Pour être honnête, j'ai changé tellement de petites choses que je ne sais toujours pas quelle est la cause était.
Peut-être qu'il y avait encore certains membres privés.
De toute façon, peut-être que le code peut être utile pour n'importe qui:
Sérialiseur:
L'appel de la Sérialiseur:
L'appel de la deSerializer:
OriginalL'auteur Rob Heijligers
J'avais besoin de faire ce aussi mais de créer une chaîne à la place. Voici ma solution:
OriginalL'auteur jrjensen