Compte tenu de cet extrait XML:Comment désérialiser un élément namespaced à un objet dans .net?
...
<InSide:setHierarchyUpdates>
<automaticUpdateInterval>5</automaticUpdateInterval>
<shouldRunAutomaticUpdates>true<shouldRunAutomaticUpdates>
</InSide:setHierarchyUpdates>
...
Je cherche à sérialiser cet objet:
Imports System.Xml.Serialization
<XmlRoot(ElementName:="setHierarchyUpdates", namespace:="InSide")> _
Public Class HierarchyUpdate
<XmlElement(ElementName:="shouldRunAutomaticUpdates")> _
Public shouldRunAutomaticUpdates As Boolean
<XmlElement(ElementName:="automaticUpdateInterval")> _
Public automaticUpdateInterval As Integer
End Class
Comme ceci:
Dim hierarchyUpdater As New HierarchyUpdate
Dim x As New XmlSerializer(hierarchyUpdater.GetType)
Dim objReader As Xml.XmlNodeReader = New Xml.XmlNodeReader(myXMLNode)
hierarchyUpdater = x.Deserialize(objReader)
Cependant, l'objet, après la désérialisation, a des valeurs de faux et zéro. Si je passe le objReader à un StreamReader et lu dans un fichier, avec aucun de ses parents et sans espaces de noms, cela fonctionne:
<setHierarchyUpdates>
<automaticUpdateInterval>5</automaticUpdateInterval>
<shouldRunAutomaticUpdates>true<shouldRunAutomaticUpdates>
</setHierarchyUpdates>
Qu'est-ce que je fais mal? Dois-je utiliser autre chose que XMLRoot dans la définition de classe, car, en tant que nœud XML, ce n'est pas vraiment la racine? Si oui, quoi? Pourquoi aucune erreur n'est renvoyée lorsque cela échoue?
Nous vous remercions de la note sur le préfixe d'espace de nommage. Cependant, même lorsque j'ajoute l'espace de noms au constructeur (en vérifiant qu'il ne s'agit pas seulement du préfixe), il ne désérialise toujours pas correctement. Je ne pense pas que cela changerait les choses, mais l'élément parent (au-dessus de shouldRunAutomaticUpdates) a plusieurs espaces de noms définis, dont l'un est 'InSide'. – pc1oad1etter