我正在嘗試獲取一個類,使用該類定義一個物件,然后將該物件寫入 XML。似乎我可以用“公共共享”創建一個類(在下面發布),創建一個由該類(字符)定義的公共共享物件,用資料填充它,然后直接將其寫出到 XML。我遇到了一堆墻,從參考錯誤到創建的物件“寫入”,但盡管其中有值,但還是空白。
我只能假設我對如何從 vb.net 撰寫 XML 缺乏基本的了解,盡管進行了大量研究,但我覺得這里沒有更接近的解決方案。
班級:
Public Class Character
Public Class CharacterStats
<XmlElement("CoreList")>
Public Shared ListCore As CoreStats
End Class
Public Class PowerList
<XmlElement("PowerList")>
Public Shared ListPowers As List(Of Power)
End Class
Public Class EdgeList
<XmlElement("EdgesList")>
Public Shared ListEdges As Edges
End Class
Public Class WeaponList
<XmlElement("WeaponList")>
Public Shared ListWeps As List(Of Weapon)
End Class
Public Class ArmorList
<XmlElement("ArmorList")>
Public Shared ListArm As List(Of Armor)
End Class
Public Class VehicleList
<XmlElement("VehicleList")>
Public Shared ListVeh As List(Of Vehicle)
End Class
End Class
定義的物件(?):
Public Class GVar
Public Shared Property CharacterFile As New Character
End Class
然后,嘗試在子檔案中將其寫出到 XML:
Dim serializer As New XmlSerializer(GetType(Character))
Dim writer As New StreamWriter("C:\temp\newCharacter.STC")
serializer.Serialize(writer, GVar.CharacterFile)
writer.Close()
雖然這“有效”,但它輸出的 XML 檔案是空白的,除了標題:
<?xml version="1.0" encoding="utf-8"?>
我敢肯定我只是在這里遺漏了一些非常明顯的東西,但它完全逃脫了我。
編輯/更新:
每個公共共享項都是從其他類定義的,每個類都有自己的一組值。我將其中之一作為示例,盡管它們的結構都相似:
Public Class Power
'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 String)
Public Desc As String
End Class
因此,在這種情況下,公共類“角色”具有(作為第二個條目)公共共享串列權力,作為“權力”串列,如此處定義。最初這樣做是為了為從內部讀取/寫入的各種型別別(Core、Power 等)中的每一個初始化一個物件。
我希望我可以創建一個根來將所有這些子類嵌套到一個 XML 檔案中,而不必在保存時將它們全部分解為自己的 XML 檔案。
繼續嘗試將 List 物件寫入 XML (VB.net)
uj5u.com熱心網友回復:
你的類中有一堆不必要的類定義,在這些類中是共享屬性,這可能不是你想要的。這是 Character 類的樣子
<XmlRoot>
Public Class Character
<XmlElement()>
Public Property Core As CoreStats
<XmlElement("Power")>
Public Property Powers As List(Of Power)
<XmlElement()>
Public Property Edges As Edges
<XmlElement("Weapon")>
Public Property Weapons As List(Of Weapon)
<XmlElement("Armor")>
Public Property Armors As List(Of Armor)
<XmlElement("Vehicle")>
Public Property Vehicles As List(Of Vehicle)
End Class
Public Class CoreStats
' properties in here in your implementation
End Class
Public Class Power
End Class
Public Class Edges
End Class
Public Class Weapon
End Class
Public Class Armor
End Class
Public Class Vehicle
End Class
順便說一句,帶有“Power”的屬性
<XmlElement("Power")>
Public Property Powers As List(Of Power)
意味著 Xml 將具有名為 Power 的元素,這些元素被序列化為 Powers 屬性。如果沒有屬性中的名稱,序列化程式將撰寫/查找命名為屬性名稱(Powers)的元素,即
和 <XmlElement()> Public Property Powers As List(Of Power)
<Character>
<Powers>
</Powers>
<Powers>
</Powers>
</Character>
對比 <XmlElement("Power")> Public Property Powers As List(Of Power)
<Character>
<Power>
</Power>
<Power>
</Power>
</Character>
你當然可以有更多級別的屬性,例如,如果 Power 類里面有一個串列,它可能看起來像這樣
Public Class Power
<XmlElement("SubPower")>
Public Property SubPowers As List(Of SubPower)
End Class
Public Class SubPower
End Class
并且序列化器將考慮所有這些額外級別的類/屬性,即
<Character>
<Power>
<SubPower>
</SubPower>
<SubPower>
</SubPower>
</Power>
<Power>
</Power>
</Character>
順便說一句,你也可以像這樣制作原始屬性屬性
Public Class Power
<XmlAttribute>
Public Name As String
<XmlAttribute>
Public PRating As Integer
<XmlAttribute>
Public Action As String
...
<XmlElement("Tag")>
Public Tags As New List(Of String)
End Class
<Character>
<Power Name="ecit" PRating="25" Action="Question">
<Tag>
Tag One
</Tag>
<Tag>
Tag Two
</Tag>
</Power>
</Character>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/361776.html
標籤:网络
