2009-07-11 46 views
4

爲什麼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「是模塊的名稱;這是一個控制檯應用程序)

回答

5

問題是您已經在Module Module1中包含類User,消息表明此模塊的可訪問性不公開,因爲它嵌套在模塊中,因此它的實際可訪問性不公開,因爲它嵌套在模塊中。模塊,它應該解決你的問題。

編輯

正如幾個人指出的,最簡單的方法是將User類放入它自己的文件中。

+2

Yeap,它似乎對我也是。我的首選是將用戶類放入其自己的文件中。 – RichardOD 2009-07-11 21:01:15