【发布时间】:2018-05-20 23:19:55
【问题描述】:
我成功地反序列化了这个 XML,但是当我添加元数据部分时,如下所示,我不知道如何在代码中反序列化它。我的意思是我不知道如何构建我的类属性、方法、属性标签等。
我尝试了许多组合,但反序列化后元数据在我的课堂上仍然是空的。甚至不确定我是否在问正确的问题,而且我的代码有点冗长。我尝试在此处粘贴它,但它说它太长了,所以我不知道如何粘贴所有内容以供任何人查看。
<?xml version="1.0" encoding="utf-8"?>
<MainMenu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MenuItems MenuGroup="Boilers">
<SubMenuItem>
<GUID>3ec6e759-270f-4cd1-a9b8-07b4c227d47b</GUID>
<ComponentType>Boiler:HotWater</ComponentType>
<DefaultName>Boiler - Hot Water</DefaultName>
<EquipmentUsage>Supply</EquipmentUsage>
<Picture>iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAYAAABxLuKEAAAABGdBTUEAALGPC/xhBQAABFdJREFUeF7tm89PE1EQx9vyQ8SCNSLWH5BGDWli1CKGFBRFMYgJBxIvmHggMfHcxANcSI8c/TM8cuTIyXD<Picture>
<ImageName>hot_water_boiler</ImageName>
</SubMenuItem>
<SubMenuItem>
<GUID>1a4ee747-c11b-4687-be41-73680c104934</GUID>
<ComponentType>Boiler:Steam</ComponentType>
<DefaultName>Boiler - Steam</DefaultName>
<!-- How to deserialize this Metadata section? -->
<Metadata>
<MetadataItem>
<description>Design Flow Rate {m3/s}</description>
<value>Autosize</value>
</MetadataItem>
<MetadataItem>
<description>Design Pump Head {Pa}</description>
<value>179352</value>
</MetadataItem>
</Metadata>
<EquipmentUsage>Supply</EquipmentUsage>
<Picture>iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAYAAABxLuKEAAAABGdBTUEAALGPC/xhBQAABFdJREFUeF7tm89PE1EQx9vyQ8SCNSLWH5BGDWli1CKGFBRFMYgJBxIvmHggMfHcxANcSI8c/TM8cuTIyXD0yNGjR44e1/mU3bK7vIVd7Nvuq2+ST3ZT2O7M972ZnX27zVmzZs1aj1peKLj0JcA7huN7y7a3t53NzU2<Picture>
<ImageName>hot_water_boiler</ImageName>
</SubMenuItem>
</MenuItems>
</MainMenu>
我添加了列表属性的代码,
<XmlType("MenuItem")>
Public Class PECSubMenuItem
'NOTE: By NOT specifing any custom Metadata Attributes, fields will be created as an element by default.
Private mGUID As String
Private mPicture As Bitmap
Private mMenuGroup As String
Private mComponentType As String
Private mDefaultName As String
Private mImageName As String
Private mEquipmentUsage As String
Private mMetadataList As List(Of MetadataItem)
Public Enum EquipUsage
Supply = 0
Demand = 1
Both = 2
End Enum
Public Sub New()
mGUID = System.Guid.NewGuid.ToString
mMetadataList = New List(Of MetadataItem)
End Sub
<XmlElement("Metadata")>
Public Property Metadata As List(Of MetadataItem)
Get
Return mMetadataList
End Get
Set(ByVal value As List(Of MetadataItem))
mMetadataList = value
End Set
End Property
我为新课程添加的代码。
<XmlType("MetadataItem")>
Public Class MetadataItem
Private mvalue As String
Private mdescription As String
<XmlElement("description")>
Public Property description As String
Get
Return mdescription
End Get
Set(ByVal value As String)
mdescription = value
End Set
End Property
<XmlElement("value")>
Public Property value As String
Get
Return mvalue
End Get
Set(ByVal value As String)
mvalue = value
End Set
End Property
End Class
【问题讨论】:
-
我不是 XML 专家,但是这个元数据“部分”有什么特别之处呢?它与其他节点有何不同?
-
这些是我所做的更改,到目前为止,反序列化后元数据列表仍然为空。文森特,你说的一件非常微妙的事情是“在你的第一堂课”。你能澄清一下“初级班”这个词吗? PECSubMenuItem 类是 PECMenuItem 类中定义的列表的列表成员,PECMenuItem 是 PECMainMenu 中定义的列表的列表成员。
-
初始类是元数据应该属于的类(取决于 XML 的样子)。在这种情况下,它应该属于代表
SubMenuItem的类,它似乎在您的新代码中执行,因此它应该工作。让我启动 Visual Studio,我会尝试一下。 -
它对我来说很好用。请参阅下面的答案。