You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.net将List对象写入XML时报InvalidCastException错误如何解决

问题原因

你初始化XmlSerializer时传入的类型为GetType(frmMain.PowerArray),仅对应单个PowerArray类实例,但你实际要序列化的是List(Of PowerArray)集合对象,二者类型不匹配,因此抛出强制类型转换异常。

解决方法

1. 修正序列化代码

将XmlSerializer的构造参数改为你要序列化的实际对象类型,同时推荐使用Using语句自动管理IO流资源,无需手动调用Close:

' 序列化器指定为 List(Of PowerArray) 类型
Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(List(Of frmMain.PowerArray)))
' 用Path.Combine拼接路径避免分隔符错误
Using file As New System.IO.StreamWriter(System.IO.Path.Combine("c:\temp", "PowerTest.PWR"))
    serializer.Serialize(file, frmMain.GVar.CharPowers)
End Using

2. 反序列化注意事项

后续读取XML反序列化时,也需要使用相同的List(Of PowerArray)类型初始化序列化器,示例如下:

Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(List(Of frmMain.PowerArray)))
Using file As New System.IO.StreamReader(System.IO.Path.Combine("c:\temp", "PowerTest.PWR"))
    Dim CharPowers As List(Of frmMain.PowerArray) = CType(serializer.Deserialize(file), List(Of frmMain.PowerArray))
End Using

3. 额外注意项

你定义的PowerArray类中Tags属性为List(Of Object)类型:

  • 如果Tags中仅存储字符串、数值等基础类型,无需额外处理
  • 如果Tags中存储自定义类实例,需要给PowerArray类添加XmlInclude特性,声明所有可能存储的自定义类型,否则会触发序列化异常,示例如下:
<System.Xml.Serialization.XmlInclude(GetType(自定义标签类类型1))>
<System.Xml.Serialization.XmlInclude(GetType(自定义标签类类型2))>
Public Class PowerArray
    ' 原有类属性定义保持不变
End Class

内容的提问来源于stack exchange,提问作者ecit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:15:08