我在將非 List 物件寫入 XML 時沒有遇到任何問題,它按預期讀取和寫入。但是將 List 物件寫入 XML 會將我的整個匯出/匯入程序拋在一邊,我不知道為什么。
物件是基于這個類構建的:
Public Class PowerArray
'Array that stores Powers for active character
Public Name As String
Public PRating As Integer
Public Action As String
Public Cost As Integer
Public PoolNone As String
Public Pool1 As String
Public Pool2 As String
Public Range As String
Public Duration As String
Public Tags As New List(Of Object)
Public Desc As String
End Class
從類創建的物件是:
Public Shared Property CharPowers As New List(Of PowerArray)
例如,我可以將物件“CharCore”(根據類“Character”定義,它不是串列)寫入 XML 就好了。
如果我嘗試將 CharPowers 作為填充串列寫入 XML,它會由此引發錯誤:
Dim writer As New System.Xml.Serialization.XmlSerializer(GetType(frmMain.PowerArray))
Dim file As New System.IO.StreamWriter("c:\temp\" "PowerTest.PWR")
writer.Serialize(file, frmMain.GVar.CharPowers)
file.Close()
- 出現錯誤“InvalidCastException:無法將型別為 'System.Collections.Generic.List`1[NICO_SP_v2.frmMain PowerArray]' 的物件轉換為型別為 'PowerArray'。”
我不確定這里的 List 有何不同。任何幫助,將不勝感激。
編輯:添加注釋,re:字符類
Dim writer As New System.Xml.Serialization.XmlSerializer(GetType(Character))
Dim file As New System.IO.StreamWriter("C:\temp\chartest_A.STC")
writer.Serialize(file, GVar.CharacterFile)
uj5u.com熱心網友回復:
一個 Xml 檔案必須有一個根元素,即不能只在頂層有一堆元素。所以改為創建一個類來保存 PowerArray 的串列
讓你的課程像這樣
Imports System.IO
Imports System.Xml.Serialization
<XmlRoot>
Public Class PowerArrays
<XmlElement("PowerArray")>
Public Property List As List(Of PowerArray)
End Class
Public Class PowerArray ' unchanged
'Array that stores Powers for active character
Public Name As String
Public PRating As Integer
Public Action As String
Public Cost As Integer
Public PoolNone As String
Public Pool1 As String
Public Pool2 As String
Public Range As String
Public Duration As String
Public Tags As New List(Of Object)
Public Desc As String
End Class
并序列化根
Dim powers = New PowerArrays() With {.List = frmMain.GVar.CharPowers.ToList()}
Dim serializer As New XmlSerializer(GetType(PowerArrays))
Using writer As New StreamWriter($"c:\temp\{PowerTest.PWR}")
serializer.Serialize(writer, powers)
End Using
你的 Xml 應該導致
<?xml version="1.0" encoding="utf-8"?>
<PowerArrays>
<PowerArray>
<Name>foo</Name>
...
</PowerArray>
<PowerArray>
<Name>bar</Name>
...
</PowerArray>
</PowerArrays>
反向反序列化
Dim powers = New PowerArrays()
Dim serializer As New XmlSerializer(GetType(PowerArrays))
Using reader As New StreamReader($"c:\temp\{PowerTest.PWR}")
powers = DirectCast(serializer.Deserialize(reader), PowerArrays)
End Using
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359605.html
上一篇:解組回傳重復的空值
