我正在嘗試反序列化一個 XML 檔案,但我收到了錯誤,我不知道它為什么會出現
錯誤: XML 檔案 (2, 2) 中存在錯誤。沒想到。
我有以下資料結構
Public Class VPADeviceMeasureData
<XmlElement()>
Public ChannelNumber As Integer
<XmlArray("Measurement")>
<XmlArrayItem("MeasureValues")>
Public MeasureValues As List(Of MeasureValues)
Public Sub New()
End Sub
Public Sub New(ChannelNumber As Integer, MeasureValues As List(Of MeasureValues))
Me.ChannelNumber = ChannelNumber
Me.MeasureValues = MeasureValues
End Sub
End Class
Public Class MeasureValues
Public Amplitude As String
Public Fall As String
Public Width As String
Public setWidth As Decimal
Public settPRF As Decimal
Public setVoltage As Decimal
Public Sub New()
End Sub
Public Sub New(ByVal PAmp As Single, ByVal PFallTime As Single, ByVal PWidth As Single, ByVal SPRF As Integer, ByVal SVoltage As Single, ByVal SWidth As Single)
settPRF = SPRF
setVoltage = SVoltage
setWidth = SWidth
Amplitude = PAmp
Fall = PFallTime
Width = PWidth
End Sub
End Class
我的反序列化器
Dim reader As XmlReader = XmlReader.Create(FILE1)
Dim writer As XmlWriter = XmlWriter.Create(FILE2)
Dim serialization As XmlSerializer = New XmlSerializer(GetType(VPADeviceMeasureData))
Dim PulserMeasDataPA As VPADeviceMeasureData = serialization.Deserialize(reader)
serialization.Serialize(writer, PulserMeasDataPA)
這是我的 XML
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfVPADeviceMeasureData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<VPADeviceMeasureData>
<ChannelNumber>1</ChannelNumber>
<Measurement>
<MeasureValues>
<Amplitude>1</Amplitude>
<Fall>120</Fall>
<Width>500</Width>
<setWidth>40</setWidth>
<settPRF>1000</settPRF>
<setVoltage>50</setVoltage>
</MeasureValues>
<MeasureValues>
<Amplitude>1</Amplitude>
<Fall>120</Fall>
<Width>500</Width>
<setWidth>40</setWidth>
<settPRF>1000</settPRF>
<setVoltage>50</setVoltage>
</MeasureValues>
</Measurement>
</VPADeviceMeasureData>
<VPADeviceMeasureData>
<ChannelNumber>2</ChannelNumber>
<Measurement>
<MeasureValues>
<Amplitude>1</Amplitude>
<Fall>120</Fall>
<Width>500</Width>
<setWidth>40</setWidth>
<settPRF>1000</settPRF>
<setVoltage>50</setVoltage>
</MeasureValues>
<MeasureValues>
<Amplitude>1</Amplitude>
<Fall>120</Fall>
<Width>500</Width>
<setWidth>40</setWidth>
<settPRF>1000</settPRF>
<setVoltage>50</setVoltage>
</MeasureValues>
</Measurement>
</VPADeviceMeasureData>
</ArrayOfVPADeviceMeasureData>
我試過了,但我錯過了所有資料,它沒有正確地再次寫入 XML
<XmlRoot(ElementName:="ArrayOfVPADeviceMeasureData")>
另外,我的“ArrayOfVPADeviceMeasureData”在我的資料結構中有這個,但是當我序列化我的資料時,它也將“ArrayOfVPADeviceMeasureData”保存到我不想保存的xml中
這就是我首先進行序列化的方式。
Dim vpaDAta As New List(Of VPADeviceMeasureData) From
{
New VPADeviceMeasureData With {.ChannelNumber = 1, .MeasureValues = New List(Of MeasureValues) From
{
New MeasureValues With {.Amplitude = 1, .Fall = 120, .settPRF = 1000, .setVoltage = 50, .setWidth = 40, .Width = 500},
New MeasureValues With {.Amplitude = 1, .Fall = 120, .settPRF = 1000, .setVoltage = 50, .setWidth = 40, .Width = 500}}},
New VPADeviceMeasureData With {.ChannelNumber = 2, .MeasureValues = New List(Of MeasureValues) From
{
New MeasureValues With {.Amplitude = 1, .Fall = 120, .settPRF = 1000, .setVoltage = 50, .setWidth = 40, .Width = 500},
New MeasureValues With {.Amplitude = 1, .Fall = 120, .settPRF = 1000, .setVoltage = 50, .setWidth = 40, .Width = 500}
}}}
Dim writer As XmlWriter = XmlWriter.Create(FILE1)
Dim serialization As XmlSerializer = New XmlSerializer(GetType(List(Of VPADeviceMeasureData)))
serialization.Serialize(writer, vpaDAta)
uj5u.com熱心網友回復:
危險信號是您有兩個不同的序列化程式。您應該能夠使用相同的序列化程式進行讀寫,因此首先嘗試這樣做。我認為您可以使用一個附加類來表示檔案的 xml 根。看看我是如何作業的:
<XmlRoot>
Public Class ArrayOfVPADeviceMeasureData
<XmlElement("VPADeviceMeasureData")>
Public Property VPADeviceMeasureDatas As List(Of VPADeviceMeasureData)
End Class
Public Class VPADeviceMeasureData
<XmlElement()>
Public ChannelNumber As Integer
<XmlArray("Measurement")>
<XmlArrayItem("MeasureValues")>
Public MeasureValues As List(Of MeasureValues)
Public Sub New()
End Sub
Public Sub New(ChannelNumber As Integer, MeasureValues As List(Of MeasureValues))
Me.ChannelNumber = ChannelNumber
Me.MeasureValues = MeasureValues
End Sub
End Class
Public Class MeasureValues
Public Amplitude As String
Public Fall As String
Public Width As String
Public setWidth As Decimal
Public settPRF As Decimal
Public setVoltage As Decimal
Public Sub New()
End Sub
Public Sub New(ByVal PAmp As Single, ByVal PFallTime As Single, ByVal PWidth As Single, ByVal SPRF As Integer, ByVal SVoltage As Single, ByVal SWidth As Single)
settPRF = SPRF
setVoltage = SVoltage
setWidth = SWidth
Amplitude = PAmp
Fall = PFallTime
Width = PWidth
End Sub
End Class
并使用單個序列化程式對其進行測驗。您應該在序列化程式中使用相同的類進行讀取和寫入,無論序列化程式實際上是否相同。
Dim FILE1 = "myFile.xml"
Dim root As New ArrayOfVPADeviceMeasureData()
Dim vpaDAta As New List(Of VPADeviceMeasureData) From
{
New VPADeviceMeasureData With {.ChannelNumber = 1, .MeasureValues = New List(Of MeasureValues) From
{
New MeasureValues With {.Amplitude = 1, .Fall = 120, .settPRF = 1000, .setVoltage = 50, .setWidth = 40, .Width = 500},
New MeasureValues With {.Amplitude = 1, .Fall = 120, .settPRF = 1000, .setVoltage = 50, .setWidth = 40, .Width = 500}}},
New VPADeviceMeasureData With {.ChannelNumber = 2, .MeasureValues = New List(Of MeasureValues) From
{
New MeasureValues With {.Amplitude = 1, .Fall = 120, .settPRF = 1000, .setVoltage = 50, .setWidth = 40, .Width = 500},
New MeasureValues With {.Amplitude = 1, .Fall = 120, .settPRF = 1000, .setVoltage = 50, .setWidth = 40, .Width = 500}
}}}
root.VPADeviceMeasureDatas = vpaDAta
Dim serializer As New XmlSerializer(GetType(ArrayOfVPADeviceMeasureData))
Using writer = New StreamWriter(FILE1, False)
serializer.Serialize(writer, root)
End Using
Using reader = New StreamReader(FILE1)
root = serializer.Deserialize(reader)
End Using
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/426198.html
