反序列化(通用应用程序)XML 序列化为 vb.net
Deserializing (Universal App) XML serialized with vb.net
我正在 Windows 表单应用程序中使用 vb.net 序列化 class (PSD):
Dim objStreamWriter As New System.IO.StreamWriter("e:\test.xml")
Dim x As New System.Xml.Serialization.XmlSerializer(PSD.GetType)
x.Serialize(objStreamWriter, PSD)
objStreamWriter.Close()
我需要在 Windows 通用应用程序中反序列化 class。
到目前为止,这是我的代码:
Dim picker As Windows.Storage.Pickers.FileOpenPicker = New Windows.Storage.Pickers.FileOpenPicker
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail
picker.FileTypeFilter.Add(".xml")
Dim File As Windows.Storage.StorageFile = Await picker.PickSingleFileAsync
Dim Fl = Await File.OpenAsync(Windows.Storage.FileAccessMode.Read)
Dim inStream As Stream = Fl.AsStreamForRead()
Dim PSD As New PlatinaStammdaten
Dim serializer = New XmlSerializer(GetType(List(Of PlatinaStammdaten)), New Type() {GetType(PlatinaStammdaten)})
PSD = serializer.Deserialize(inStream)
我得到的是错误"There is an error in XML document (2, 2)."
这是生成的 XML- 文件的开头:
<?xml version="1.0" encoding="utf-8"?>
<Stammdaten xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Lose>
<Los>
<Name>Sonstige</Name>
<KZ>000</KZ>
</Los>
<Los>
<Name>LOS 1; Allgemein / Planung</Name>
<KZ>110</KZ>
</Los>
...
我的代码(写入或读取)中有什么错误导致该错误?
看起来您正在尝试将列表反序列化为单个实例
Dim PSD 作为新的 PlatinaStammdaten
Dim 序列化器 = New XmlSerializer(GetType(List(Of PlatinaStammdaten)), New Type() {GetType(PlatinaStammdaten)})
PSD = serializer.Deserialize(inStream)
尝试将 PSD 更改为
Dim PSD As List(of PlatinaStammdaten)
由于我们看不到完整的 xml 或 class,您将 xml 放入其中很难判断您是否会遇到任何其他错误
下面的代码有效
Imports System.Xml
Imports System.Xml.Serialization
Imports System.IO
Module Module1
Const FILENAME As String = "c:\temp\test.xml"
Sub Main()
Dim xs As XmlSerializer = New XmlSerializer(GetType(PlatinaStammdaten))
Dim reader As XmlTextReader = New XmlTextReader(FILENAME)
Dim PSD As PlatinaStammdaten = CType(xs.Deserialize(reader), PlatinaStammdaten)
End Sub
End Module
<XmlRoot("Stammdaten")> _
Public Class PlatinaStammdaten
Private m_lose As Lose
<XmlElement("Lose")> _
Public Property _lose As Lose
Get
Return m_lose
End Get
Set(ByVal value As Lose)
m_lose = value
End Set
End Property
End Class
<Serializable(), XmlRoot("Lose")> _
Public Class Lose
Private m_los As List(Of Los)
<XmlElement("Los")> _
Public Property _los As List(Of Los)
Get
Return m_los
End Get
Set(ByVal value As List(Of Los))
m_los = value
End Set
End Property
End Class
<Serializable(), XmlRoot("Los")> _
Public Class Los
Private m_Name As String
<XmlElement("Name")> _
Public Property name As String
Get
Return m_Name
End Get
Set(ByVal value As String)
m_Name = value
End Set
End Property
Public m_KZ As Integer
<XmlElement("KZ")> _
Public Property KZ As Integer
Get
Return m_KZ
End Get
Set(ByVal value As Integer)
m_KZ = value
End Set
End Property
End Class
'<Lose>
' <Los>
' <Name>Sonstige</Name>
' <KZ>000</KZ>
' </Los>
' <Los>
' <Name>LOS 1; Allgemein / Planung</Name>
' <KZ>110</KZ>
' </Los>
'</Lose>
我现在开始工作了。
这是我现在的反序列化代码:
Dim picker As Windows.Storage.Pickers.FileOpenPicker = New Windows.Storage.Pickers.FileOpenPicker
picker.FileTypeFilter.Add(".xml")
Dim File As Windows.Storage.StorageFile = Await picker.PickSingleFileAsync
Dim Fl = Await File.OpenAsync(Windows.Storage.FileAccessMode.Read)
Dim FileZiel As Windows.Storage.StorageFile = Await File.CopyAsync(FolderZiel, File.Name, Windows.Storage.NameCollisionOption.ReplaceExisting)
Dim Fl2 = Await FileZiel.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite)
Dim inStream2 As Stream = Fl2.AsStreamForRead()
Dim sr As StreamReader = New StreamReader(inStream2)
Dim PSD As New PlatinaStammdaten
Dim x As New XmlSerializer(PSD.GetType)
PSD = x.Deserialize(sr)
sr.Dispose()
我正在 Windows 表单应用程序中使用 vb.net 序列化 class (PSD):
Dim objStreamWriter As New System.IO.StreamWriter("e:\test.xml")
Dim x As New System.Xml.Serialization.XmlSerializer(PSD.GetType)
x.Serialize(objStreamWriter, PSD)
objStreamWriter.Close()
我需要在 Windows 通用应用程序中反序列化 class。 到目前为止,这是我的代码:
Dim picker As Windows.Storage.Pickers.FileOpenPicker = New Windows.Storage.Pickers.FileOpenPicker
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail
picker.FileTypeFilter.Add(".xml")
Dim File As Windows.Storage.StorageFile = Await picker.PickSingleFileAsync
Dim Fl = Await File.OpenAsync(Windows.Storage.FileAccessMode.Read)
Dim inStream As Stream = Fl.AsStreamForRead()
Dim PSD As New PlatinaStammdaten
Dim serializer = New XmlSerializer(GetType(List(Of PlatinaStammdaten)), New Type() {GetType(PlatinaStammdaten)})
PSD = serializer.Deserialize(inStream)
我得到的是错误"There is an error in XML document (2, 2)."
这是生成的 XML- 文件的开头:
<?xml version="1.0" encoding="utf-8"?>
<Stammdaten xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Lose>
<Los>
<Name>Sonstige</Name>
<KZ>000</KZ>
</Los>
<Los>
<Name>LOS 1; Allgemein / Planung</Name>
<KZ>110</KZ>
</Los>
...
我的代码(写入或读取)中有什么错误导致该错误?
看起来您正在尝试将列表反序列化为单个实例
Dim PSD 作为新的 PlatinaStammdaten Dim 序列化器 = New XmlSerializer(GetType(List(Of PlatinaStammdaten)), New Type() {GetType(PlatinaStammdaten)}) PSD = serializer.Deserialize(inStream)
尝试将 PSD 更改为
Dim PSD As List(of PlatinaStammdaten)
由于我们看不到完整的 xml 或 class,您将 xml 放入其中很难判断您是否会遇到任何其他错误
下面的代码有效
Imports System.Xml
Imports System.Xml.Serialization
Imports System.IO
Module Module1
Const FILENAME As String = "c:\temp\test.xml"
Sub Main()
Dim xs As XmlSerializer = New XmlSerializer(GetType(PlatinaStammdaten))
Dim reader As XmlTextReader = New XmlTextReader(FILENAME)
Dim PSD As PlatinaStammdaten = CType(xs.Deserialize(reader), PlatinaStammdaten)
End Sub
End Module
<XmlRoot("Stammdaten")> _
Public Class PlatinaStammdaten
Private m_lose As Lose
<XmlElement("Lose")> _
Public Property _lose As Lose
Get
Return m_lose
End Get
Set(ByVal value As Lose)
m_lose = value
End Set
End Property
End Class
<Serializable(), XmlRoot("Lose")> _
Public Class Lose
Private m_los As List(Of Los)
<XmlElement("Los")> _
Public Property _los As List(Of Los)
Get
Return m_los
End Get
Set(ByVal value As List(Of Los))
m_los = value
End Set
End Property
End Class
<Serializable(), XmlRoot("Los")> _
Public Class Los
Private m_Name As String
<XmlElement("Name")> _
Public Property name As String
Get
Return m_Name
End Get
Set(ByVal value As String)
m_Name = value
End Set
End Property
Public m_KZ As Integer
<XmlElement("KZ")> _
Public Property KZ As Integer
Get
Return m_KZ
End Get
Set(ByVal value As Integer)
m_KZ = value
End Set
End Property
End Class
'<Lose>
' <Los>
' <Name>Sonstige</Name>
' <KZ>000</KZ>
' </Los>
' <Los>
' <Name>LOS 1; Allgemein / Planung</Name>
' <KZ>110</KZ>
' </Los>
'</Lose>
我现在开始工作了。 这是我现在的反序列化代码:
Dim picker As Windows.Storage.Pickers.FileOpenPicker = New Windows.Storage.Pickers.FileOpenPicker
picker.FileTypeFilter.Add(".xml")
Dim File As Windows.Storage.StorageFile = Await picker.PickSingleFileAsync
Dim Fl = Await File.OpenAsync(Windows.Storage.FileAccessMode.Read)
Dim FileZiel As Windows.Storage.StorageFile = Await File.CopyAsync(FolderZiel, File.Name, Windows.Storage.NameCollisionOption.ReplaceExisting)
Dim Fl2 = Await FileZiel.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite)
Dim inStream2 As Stream = Fl2.AsStreamForRead()
Dim sr As StreamReader = New StreamReader(inStream2)
Dim PSD As New PlatinaStammdaten
Dim x As New XmlSerializer(PSD.GetType)
PSD = x.Deserialize(sr)
sr.Dispose()