【问题标题】:Expression is of type "FileName", which is not a collection type表达式的类型为“FileName”,它不是集合类型
【发布时间】:2014-10-15 19:23:46
【问题描述】:

好的,由于我无法就我发现这个问题的原始问题发表评论并实际寻求帮助,所以我正在为它制作一个新问题(原件:How do I get the value from a specific node in an XML file?

这是我的两个课程;一个是我的 XML 文件的结构,第二个是一个列表:

Public Class Member
 Public Naam As String
 Public Kills As Integer
 Public Deaths As Integer
 Public KD As Integer
End Class

Public Class Tabel
 <XmlElement("Member")> _
 Public Members As List(Of Member)
End Class  

这是执行它的代码:

Dim serializer As XmlSerializer = New XmlSerializer(GetType(Tabel))
Dim tabel As Tabel = CType(serializer.Deserialize(File.OpenRead("C:\members.xml")), Tabel)
For Each member As Member In tabel
    Dim kills As Integer = member.Kills
Next  

它应该只是循环遍历 xml 文件并按照它应该做的那样做,但是它在 For Each 循环中的最后一个变量的“表”上出错。说:表达式是'VBTest.tabel'类型,不是集合类型。

提前致谢!

【问题讨论】:

    标签: xml vb.net serialization deserialization


    【解决方案1】:

    您需要将Members 属性声明为New 对象,否则会出错。如果您使用什么外部 xml 元素来保存集合,请省略 &lt;XmlElement("Member")&gt;

    Public Class Tabel
      '<XmlElement("Member")>
      Public Property Members As New List(Of Member)
    End Class
    

    输出:

    <?xml version="1.0" encoding="utf-8"?>
    <tebel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Members>
        <Member>
          <Id>1</Id>
        </Member>
      </Members>
    

    如果你把它们加起来,那么你需要循环外的变量。

    Dim kills As Integer
    For Each member As Member In tabel.Members
      kills += member.Kills
    Next  
    

    【讨论】:

    • 嗯,对于提出原始请求的人来说,这就是最初的想法,但我更倾向于实际浏览列表并将每个“series_title”添加到列表框或数据表中.
    • 你也可以跳过循环使用kills = tabel.Members.Sum(Function(m) m.Kills)
    • 我继续将代码更改为您提供的代码,首先它给出了未关闭属性的错误,然后它说新在这种情况下无效,我仍然有问题集合类型错误..
    • @SythsGod - 您的课程Tabel 不是集合类型。它只是一种普通类型,恰好有一个集合作为它的属性。这就是 OneFineDay 的代码在 For Each 中使用 tabel.Members 的原因。
    • 我明白了,碰巧有一个很好的资源来学习如何使用 xml 文件的序列化?此外,我正在尝试为 .xml 中的每个 标记在列表中创建一个新元素。该列表包含与 相同的所有子元素,因此它有点像某种结构。 (抱歉回复晚了)
    猜你喜欢
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2021-07-24
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多