为什么XMLSerializer不会处理我的通用列表?
Sub Main()
Serializing()
End Sub
<System.Serializable()> _
Public Class User
Public Sub New()
End Sub
Public Sub New(ByVal Username As String, ByVal UserId As Integer)
Name = Username
ID = UserId
End Sub
Public Name As String
Public ID As Integer
End Class
Public Sub Serializing()
Dim Users As New List(Of User)
Dim u As New User
u.Name = "bob"
u.ID = 1
Users.Add(u)
u.Name = "bill"
u.ID = 2
Users.Add(u)
u.Name = "ted"
u.ID = 3
Users.Add(u)
Dim sw As New System.IO.StringWriter
Dim ser As New System.Xml.Serialization.XmlSerializer(GetType(List(Of User)))
ser.Serialize(sw, Users)
Debug.WriteLine(sw.ToString)
End Sub
我在“Dim ser”行上有一个例外,说“由于其保护级别,Testing.Module1无法访问。只能处理公共类型。” (“Testing是应用程序的名称,”Module1“是模块的名称;这是一个控制台应用程序。)
答案 0 :(得分:5)
问题是您已在Module Module1中包含了类User。该错误消息表明此模块的可访问性不公开。因此,User的实际可访问性不是公共的,因为它嵌套在Module中。
将外部模块的定义更改为公共或将类用户移动到模块外部,它应该可以解决您的问题。
修改强>
正如几位人士指出的那样,实现这一目标的最简单方法是将User类放入其自己的文件中。