首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将XML文件解析为自定义类- InvalidCastException

将XML文件解析为自定义类- InvalidCastException
EN

Stack Overflow用户
提问于 2014-06-02 09:36:17
回答 1查看 73关注 0票数 1

我有一个自定义的XML文件,看起来像这样,里面有一些'n‘项。我试图将所有的值加载到lst变量上,并对它执行一个foreach循环,以便进一步处理……

代码语言:javascript
复制
  <ItemInfo>
    <StartTime>2014-06-16T00:00:00</StartTime>
    <EndTime>2014-06-16T23:59:59</EndTime>
    <Text>Calendar Project Started</Text>
    <A>255</A>
    <R>255</R>
    <G>0</G>
    <B>0</B>
  </ItemInfo>
  <ItemInfo>
    <StartTime>2014-08-02T00:00:00</StartTime>
    <EndTime>2014-08-02T23:59:59</EndTime>
    <Text>First Release</Text>
    <A>255</A>
    <R>255</R>
    <G>0</G>
    <B>0</B>
  </ItemInfo>

我正在尝试使用Deserialze()方法解析它们。

代码语言:javascript
复制
 Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim fi As System.IO.FileInfo = New IO.FileInfo(System.IO.Path.Combine(Application.StartupPath, "items.xml"))
        If fi.Exists Then
            Dim lst As New List(Of ItemInfo)
            Dim serializer As New XmlSerializer(GetType(ItemInfo))
            Dim fs As New IO.FileStream("items.xml", IO.FileMode.Open)
            Dim reader As System.Xml.XmlReader = System.Xml.XmlReader.Create(fs)          
            lst = CTypeDynamic(serializer.Deserialize(reader), lst.GetType)  '->Invalid cast Exception
            fs.Close()
        End If
    End Sub

自定义类如下:

代码语言:javascript
复制
Public Class ItemInfo
    Public StartTime As DateTime
    Public EndTime As DateTime
    Public Text As String
    Public A As Int32
    Public R As Int32
    Public G As Int32
    Public B As Int32
    Dim pattern As HatchStyle
    Dim patternColor As Color

    Public Sub ItemInfo(startTime As DateTime, endTime As DateTime, text As String, color As Color)
        startTime = startTime
        endTime = endTime
        text = text
        A = color.A
        R = color.R
        G = color.G
        B = color.B
    End Sub
End Class

例外消息是:

从类型'ItemInfo‘到类型'List(Of ItemInfo)’的转换无效。

对于我在哪里做错误有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-02 10:03:20

您使用错误的类型初始化XmlSerializer

您的XML包含一个项数组,并且尝试将其反序列化为一个List(Of ItemInfo),因此您应该使用:

代码语言:javascript
复制
Dim serializer As New XmlSerializer(lst.GetType())

而不是

代码语言:javascript
复制
Dim serializer As New XmlSerializer(GetType(ItemInfo))

反序列化为List(Of ItemInfo),而不是一个ItemInfo

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23991443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档