vb.net 中的 XML 结构和写入 XML:输出始终为空白
XML structures in vb.net and Writing to XML: Output Always Blank
我正在尝试使用 Class,用 Class 定义 Object,然后将 Object 写入 XML。似乎我可以用'Public Shared's创建一个Class(在下面发布),创建一个由class(字符)定义的Public共享object ,用数据填充它,然后直接写出到 XML。我遇到了很多问题,从引用错误到创建的 object“写作”,但尽管其中有值,但仍然是空白。
我只能假设我对如何从 vb.net 编写 XML 缺乏基本的了解,尽管进行了大量研究,但我觉得这里离解决方案还很近.
Class:
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
已定义 object(?):
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 文件是空白的,除了 header:
<?xml version="1.0" encoding="utf-8"?>
我确定我在这里遗漏了一些非常明显的东西,但它完全逃避了我。
EDIT/update:
每个 Public 共享项都是根据其他 Class 项定义的,每个项都有自己的一组值。我将以其中之一为例,尽管它们的结构都相似:
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
所以在这种情况下,Public Class“角色”有(因为它是第二个条目)Public Shared ListPowers,作为“权力”的列表,定义如下.最初这样做是为了为各种 class 类型(Core、Power 等)中的每一种初始化 object,这些类型来自内部 read/written。
我希望我可以创建一个根来将所有这些 sub-classes 嵌套到一个 XML 文件中,而不必将它们全部分解成自己的 XML 文件关于节省。
续
您的 class 中有一堆不必要的 class 定义,其中 class 是共享属性,这可能不是您想要的。角色 class 应该是这样的
<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 属性。如果属性中没有名称,序列化程序将编写/查找名为 属性 名称(幂)的元素,即
和<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 class 里面有一个列表,它可能看起来像这样
Public Class Power
<XmlElement("SubPower")>
Public Property SubPowers As List(Of SubPower)
End Class
Public Class SubPower
End Class
并且序列化程序将考虑所有这些额外级别的 classes/属性,即
<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>
我正在尝试使用 Class,用 Class 定义 Object,然后将 Object 写入 XML。似乎我可以用'Public Shared's创建一个Class(在下面发布),创建一个由class(字符)定义的Public共享object ,用数据填充它,然后直接写出到 XML。我遇到了很多问题,从引用错误到创建的 object“写作”,但尽管其中有值,但仍然是空白。
我只能假设我对如何从 vb.net 编写 XML 缺乏基本的了解,尽管进行了大量研究,但我觉得这里离解决方案还很近.
Class:
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
已定义 object(?):
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 文件是空白的,除了 header:
<?xml version="1.0" encoding="utf-8"?>
我确定我在这里遗漏了一些非常明显的东西,但它完全逃避了我。
EDIT/update:
每个 Public 共享项都是根据其他 Class 项定义的,每个项都有自己的一组值。我将以其中之一为例,尽管它们的结构都相似:
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
所以在这种情况下,Public Class“角色”有(因为它是第二个条目)Public Shared ListPowers,作为“权力”的列表,定义如下.最初这样做是为了为各种 class 类型(Core、Power 等)中的每一种初始化 object,这些类型来自内部 read/written。
我希望我可以创建一个根来将所有这些 sub-classes 嵌套到一个 XML 文件中,而不必将它们全部分解成自己的 XML 文件关于节省。
续
您的 class 中有一堆不必要的 class 定义,其中 class 是共享属性,这可能不是您想要的。角色 class 应该是这样的
<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 属性。如果属性中没有名称,序列化程序将编写/查找名为 属性 名称(幂)的元素,即
和<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 class 里面有一个列表,它可能看起来像这样
Public Class Power
<XmlElement("SubPower")>
Public Property SubPowers As List(Of SubPower)
End Class
Public Class SubPower
End Class
并且序列化程序将考虑所有这些额外级别的 classes/属性,即
<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>