¿Por qué no XMLSerializer proceso de mi lista genérica?

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

Puedo obtener una excepción en el «Dim ser» de la línea, diciendo «las Pruebas.Module1 es inaccesible debido a su nivel de protección. Sólo los tipos públicos puede ser procesado». («La prueba es el nombre de la aplicación, y «Module1» es el nombre del módulo; esta es una aplicación de consola).

OriginalEl autor DWRoelands | 2009-07-11

1 Comentario

  1. 5

    El problema es que han incluido la clase de Usuario en el interior del Módulo Module1. El mensaje de error indica que la accesibilidad de este módulo no es pública. Por lo tanto la accesibilidad real de Usuario que no es público, ya que está anidado dentro del Módulo.

    Cambiar la definición de su Módulo exterior sea Pública o mover la Clase de Usuario fuera del módulo y se debería solucionar el problema.

    EDITAR

    Ya que varias personas se señaló, la más forma de lograr esto es para poner el Usuario de la clase en su propio archivo.

    Yeap que parece ser para mí también. Mi preferencia sería que poner el usuario de la Clase en su propio archivo.
    Estoy de acuerdo con Richard. Clases anidadas normalmente debe ser evitado, la regla de oro es sólo nido y/o ocultar una clase si hay 100% de certeza que ninguna otra clase deben ser conscientes de ello. Puesto que usted está a serializar la clase es claramente destinado a ser utilizado en otros lugares, así que usted realmente no quiere que se oculta
    Gracias por los comentarios, todos. Esta solucionado mi problema.

    OriginalEl autor JaredPar

Dejar respuesta

Please enter your comment!
Please enter your name here