我正在使用此代碼將我的類“設備”的物件存盤到物件,但我得到了“system.invalidcastexception”例外。我在其他課程中以相同的方式投射它,它在那里作業,但在這里它不作業
Public Class Device
Inherits MainDevice
Private TestData As New SortedList(Of Integer, DataVPAA)
Public Sub New(ByVal version As String, ByVal System As String, ByVal IdNumber As UInteger, ByVal Serial As String)
DataVersion = version
SystemVersion = System
Serial_Number = Serial
IdentNumber = IdNumber
這是我得到錯誤的地方
Dim obj As Object
obj = LoadXml(GetType(Device), Path)
If obj Is Nothing Then
' Some Logic Here
Else
Dim dev As New Device
dev = CType(obj, Device) '**system.invalidcastexception**
Me.TestData = dev.TestData
' Some Logic Here
End If
End Sub
End Class
加載函式
Function LoadXML(ByVal DeviceType As Type, ByVal Path As String) As Object
Dim obj As New Object
Dim XMLFilePath As String
Dim xmlreader As XmlReader
If Me.GetType = GetType(ABCDevice) Or Me.GetType = GetType(CVDevice) Or Me.GetType = GetType(CV2Device) Then
XMLFilePath = Path "\" strIdentNr "_" Serial_Number ".xml"
Else
XMLFilePath = Path "\" IdentNumber.ToString "_" Serial_Number ".xml"
End If
'Check if File exists
If File.Exists(XMLFilePath) Then
Dim fs As New FileStream(XMLFilePath, FileMode.Open, FileAccess.Read)
xmlreader = XmlReader.Create(fs)
Try 'Try to deserialize to object
Dim xml_deserializer As New Serialization.XmlSerializer(DeviceType)
If xml_deserializer.CanDeserialize(xmlreader) Then
obj = xml_deserializer.Deserialize(xmlreader)
End If
Catch ex As Exception
MessageBox.Show("XML Deserializer Error: " ex.Message)
End Try
fs.Close()
Return obj
Else : Return Nothing
End If
End Function
我嘗試使用不同的方法(例如 directcast 和其他方法)進行投射,但我遇到了同樣的例外。
uj5u.com熱心網友回復:
您可以使 LoadXml 通用并始終回傳您想要的型別。如
Function LoadXml(Of T)(path As String) As T
Dim obj As T = Nothing
Dim XMLFilePath As String
If Me.GetType = GetType(ABCDevice) Or Me.GetType = GetType(CVDevice) Or Me.GetType = GetType(CV2Device) Then
XMLFilePath = path "\" strIdentNr "_" Serial_Number ".xml"
Else
XMLFilePath = path "\" IdentNumber.ToString "_" Serial_Number ".xml"
End If
'Check if File exists
If File.Exists(XMLFilePath) Then
Using fs As New FileStream(XMLFilePath, FileMode.Open, FileAccess.Read)
Using reader = XmlReader.Create(fs)
Try 'Try to deserialize to object
Dim xml_deserializer As New Serialization.XmlSerializer(GetType(T))
If xml_deserializer.CanDeserialize(reader) Then
obj = xml_deserializer.Deserialize(reader)
End If
Catch ex As Exception
MessageBox.Show("XML Deserializer Error: " ex.Message)
End Try
End Using
End Using
End If
Return obj
End Function
Dim dev = LoadXml(Of Device)("path")
現在 dev 保證是一個設備。如果什么都沒有,那就失敗了
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/426195.html
上一篇:如何使用用戶指定的名稱宣告字典?
