鉴于此XML片段:
...
<InSide:setHierarchyUpdates>
<automaticUpdateInterval>5</automaticUpdateInterval>
<shouldRunAutomaticUpdates>true<shouldRunAutomaticUpdates>
</InSide:setHierarchyUpdates>
...
我正在尝试序列化此对象:
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
像这样:
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)
但是,反序列化后,对象的值为false和零。如果我将objReader切换到一个流读取器并将其作为一个文件读取,没有它的父节点和没有命名空间,它就可以工作:
<setHierarchyUpdates>
<automaticUpdateInterval>5</automaticUpdateInterval>
<shouldRunAutomaticUpdates>true<shouldRunAutomaticUpdates>
</setHierarchyUpdates>
我做错了什么?我应该在类定义中使用除XMLRoot之外的东西,因为作为XML节点,它不是真正的根节点吗?如果是这样,什么?为什么在失败时没有返回错误?
答案 0 :(得分:2)
只需指定在调用XmlSerializer构造函数时使用的默认命名空间:
Dim hierarchyUpdater As New HierarchyUpdate
Dim x As New XmlSerializer(hierarchyUpdater.GetType, "http://yournamespace.org")
Dim objReader As Xml.XmlNodeReader = New Xml.XmlNodeReader(myXMLNode)
hierarchyUpdater = x.Deserialize(objReader)
注意:您使用的InSide
很可能只是XML名称空间前缀 - 而不是真正的XML名称空间。在XML文档的某处,您应该看到如下定义:
xmlns:InSide="http://yournamespace.org"
(或类似的东西) - 你需要在XmlSerializer构造函数调用中使用实际的命名空间 - 而不是前缀 -