Serializing a generic collection with XMLSerializer in VB.NET

16,934

The problem is that you have included the class User inside of the Module Module1. The error message indicates the accessibility of this module is not public. Hence the actual accessibility of User is not public either since it is nested within the Module.

Change the definition of your outer Module to be Public or move the Class User outside the module and it should fix your problem.

EDIT

As several people pointed out, the cleanest way to achieve this is to put the User class into it's own file.

Share:
16,934
DWRoelands
Author by

DWRoelands

VB/ASP.NET developer, gamer

Updated on June 04, 2022

Comments

  • DWRoelands
    DWRoelands almost 2 years

    Why won't XMLSerializer process my generic list?

    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
    

    I get an exception on the "Dim ser" line, saying "Testing.Module1 is inaccessible due to its protection level. Only public types can be processed." ("Testing is the name of the application, and "Module1" is the name of the module; this is a console application).