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
相关产品推荐
相关产品推荐

