在VB.NET中使用XMLSerializer序列化通用集合

问题描述:

为什么XMLSerializer不能处理我的通用列表?在VB.NET中使用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 

我上“昏暗的SER”行异常,说:“Testing.Module1是无法访问由于其保护级别,只有公共类型可以进行处理。” (“测试是应用程序的名称,”Module1“是模块的名称;这是一个控制台应用程序)

问题是您已经在Module Module1中包含类User,消息表明此模块的可访问性不公开,因为它嵌套在模块中,因此它的实际可访问性不公开,因为它嵌套在模块中。模块,它应该解决你的问题。

编辑

正如几个人指出的,最简单的方法是将User类放入它自己的文件中。

+2

Yeap,它似乎对我也是。我的首选是将用户类放入其自己的文件中。 – RichardOD 2009-07-11 21:01:15