Сериализация общей коллекции с помощью XMLSerializer в VB.NET - PullRequest
4 голосов
/ 12 июля 2009

Почему 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 недоступен из-за уровня защиты. Обрабатывать могут только открытые типы». («Тестирование - это имя приложения, а« Модуль1 »- это имя модуля; это консольное приложение).

1 Ответ

5 голосов
/ 12 июля 2009

Проблема в том, что вы включили класс User внутри модуля Module1. Сообщение об ошибке указывает на то, что доступность этого модуля не является общедоступной. Следовательно, фактическая доступность пользователя также не является общедоступной, поскольку она вложена в модуль.

Измените определение внешнего модуля на Публичный или переместите пользователя класса за пределы модуля, и это должно решить вашу проблему.

EDIT

Как отметили несколько человек, самый простой способ добиться этого - поместить класс User в свой собственный файл.

...