【发布时间】:2018-10-01 09:27:57
【问题描述】:
此 XML 架构是使用在线工具生成的,该工具从 .xml 提供 .xsd 架构
我有如下所示的 XML 架构:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="snapshot">
<xs:complexType>
<xs:sequence>
<xs:element name="device" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="property" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="value" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="value" type="xs:string" />
<xs:attribute name="units" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="key" type="xs:string" />
<xs:attribute name="module" type="xs:string" />
<xs:attribute name="type" type="xs:string" />
<xs:attribute name="category" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="type" type="xs:string" />
<xs:attribute name="capabilities" type="xs:string" />
<xs:attribute name="name" type="xs:string" />
<xs:attribute name="hwlocator" type="xs:string" />
<xs:attribute name="oslocator" type="xs:string" />
<xs:attribute name="ModelUID" type="xs:string" />
<xs:attribute name="DeviceUID" type="xs:string" />
<xs:attribute name="LocationUID" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="datetime" type="xs:string" />
<xs:attribute name="locale" type="xs:string" />
<xs:attribute name="version" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="snapshot" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
我做的下一步是生成如下所示的 vb 类:
使用命令行:xsd.exe path.xsd /classes /language:vb /out:output
'
Option Strict Off
Option Explicit On
Imports System.Xml.Serialization
'
'This source code was auto-generated by xsd, Version=2.0.50727.3038.
'
'''<remarks/>
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true), _
System.Xml.Serialization.XmlRootAttribute([Namespace]:="", IsNullable:=false)> _
Partial Public Class snapshot
Private deviceField() As snapshotDevice
Private datetimeField As String
Private localeField As String
Private versionField As String
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("device", Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property device() As snapshotDevice()
Get
Return Me.deviceField
End Get
Set
Me.deviceField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property datetime() As String
Get
Return Me.datetimeField
End Get
Set
Me.datetimeField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property locale() As String
Get
Return Me.localeField
End Get
Set
Me.localeField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property version() As String
Get
Return Me.versionField
End Get
Set
Me.versionField = value
End Set
End Property
End Class
'''<remarks/>
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true)> _
Partial Public Class snapshotDevice
Private propertyField() As snapshotDeviceProperty
Private typeField As String
Private capabilitiesField As String
Private nameField As String
Private hwlocatorField As String
Private oslocatorField As String
Private modelUIDField As String
Private deviceUIDField As String
Private locationUIDField As String
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("property", Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property [property]() As snapshotDeviceProperty()
Get
Return Me.propertyField
End Get
Set
Me.propertyField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property type() As String
Get
Return Me.typeField
End Get
Set
Me.typeField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property capabilities() As String
Get
Return Me.capabilitiesField
End Get
Set
Me.capabilitiesField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property name() As String
Get
Return Me.nameField
End Get
Set
Me.nameField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property hwlocator() As String
Get
Return Me.hwlocatorField
End Get
Set
Me.hwlocatorField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property oslocator() As String
Get
Return Me.oslocatorField
End Get
Set
Me.oslocatorField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property ModelUID() As String
Get
Return Me.modelUIDField
End Get
Set
Me.modelUIDField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property DeviceUID() As String
Get
Return Me.deviceUIDField
End Get
Set
Me.deviceUIDField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property LocationUID() As String
Get
Return Me.locationUIDField
End Get
Set
Me.locationUIDField = value
End Set
End Property
End Class
'''<remarks/>
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true)> _
Partial Public Class snapshotDeviceProperty
Private valueField() As snapshotDevicePropertyValue
Private keyField As String
Private moduleField As String
Private typeField As String
Private categoryField As String
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("value", Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property value() As snapshotDevicePropertyValue()
Get
Return Me.valueField
End Get
Set
Me.valueField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property key() As String
Get
Return Me.keyField
End Get
Set
Me.keyField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property [module]() As String
Get
Return Me.moduleField
End Get
Set
Me.moduleField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property type() As String
Get
Return Me.typeField
End Get
Set
Me.typeField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property category() As String
Get
Return Me.categoryField
End Get
Set
Me.categoryField = value
End Set
End Property
End Class
'''<remarks/>
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true)> _
Partial Public Class snapshotDevicePropertyValue
Private valueField As String
Private unitsField As String
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property value() As String
Get
Return Me.valueField
End Get
Set
Me.valueField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property units() As String
Get
Return Me.unitsField
End Get
Set
Me.unitsField = value
End Set
End Property
End Class
'''<remarks/>
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true), _
System.Xml.Serialization.XmlRootAttribute([Namespace]:="", IsNullable:=false)> _
Partial Public Class NewDataSet
Private itemsField() As snapshot
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("snapshot")> _
Public Property Items() As snapshot()
Get
Return Me.itemsField
End Get
Set
Me.itemsField = value
End Set
End Property
End Class
现在我该如何反序列化这个对象:使用这样的代码
Dim serializer As New XmlSerializer(GetType(List(Of snapshot)), New XmlRootAttribute("snapshotDevice"))
Dim deserialized As List(Of snapshot) = Nothing
Using file = System.IO.File.OpenRead(XMLFile)
deserialized = DirectCast(serializer.Deserialize(file), List(Of snapshot))
End Using
我的对象什么都不返回,即我想读取这个选定的值
【问题讨论】: