Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [VB2005]Errore di deserializzazione

    Ho due metodi che dovrebbero rispettivamente l'uno salvare e l'altro leggere i dati da un file. I dati sono contenuti in una collezione di oggetti a tipizzazione forte, e vengono salvati mediante serializzazione binaria. Questi sono i rispettivi codici:
    codice:
    If Save.ShowDialog = Windows.Forms.DialogResult.OK Then
      If Save.FilterIndex = 6 Then
        Dim Serializer As New Runtime.Serialization.Formatters.Binary.BinaryFormatter()
        Dim Layers As New List(Of Layer)
        Dim Stream As New IO.FileStream(Save.FileName, IO.FileMode.Create)
    
        For Each L As ListViewItem In lstLayers.Items
           Layers.Add(L.Tag)
        Next
        Serializer.Serialize(Stream, Layers)
        Stream.Close()
      Else
        SaveDrawing(Save.FileName)
      End If
    End If
    e:
    codice:
    If Open.ShowDialog = Windows.Forms.DialogResult.OK Then
      Dim Serializer As New Runtime.Serialization.Formatters.Binary.BinaryFormatter()
      Dim Layers As New List(Of Layer)
      Dim Stream As New IO.FileStream(Open.FileName, IO.FileMode.Open)
    
      Layers = Serializer.Deserialize(Stream)  '<---------- Errore!
      Stream.Close()
    
      For Each Layer As Layer In Layers
         Dim L As New ListViewItem
         L.Text = Layer.Name
         L.ImageIndex = 0
         L.Tag = Layer
         L.Checked = True
         lstLayers.Items.Add(L)
         If Layer.Index > MaxIndex * 10 Then
           MaxIndex = Layer.Index \ 10 + 2
          End If
      Next
    End If
    L'eccezione riscontrata nel punto indicato è di tipo SerializationExeption, e riporta il seguente testo:
    "Il flusso di input non è un formato binario valido. Il contenuto iniziale (in byte) è: 89-50-4E-47-0D-0A-1A-0A-00-00-00-0D-49-48-44-52-00 ..."

    Non capisco dove sia l'errore, dato che la serializzazione NON è fatta a mano, e tutti i tipi sono esplicitamente dichiarati serializzabili. Qualcuno può aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    errore intervento inutile!

  3. #3
    Ti stai riferendo al tuo post o al topic?

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Originariamente inviato da Il Totem
    Ti stai riferendo al tuo post o al topic?
    al mio post, ho fatto una domanda la cui risposta era nel tuo codice


    il problema lo fa anche con altra formattazione?

    io in genere implementavo nella collezioni un meccanismo personalizzato quindi ti posso aiutare tanto quanto.

  5. #5
    Ho sempre utilizzato il binario e non ho provato con altri, anche perchè Xml occupa più spazio, essendo testuale. Quello che non capisco è perchè non dia errori anche nella serializzazione: non è possibile che scriva un codice sbagliato senza accorgersene. Al limite potresti farmi vedere il tuo codice per le collezioni, ma non so fino a che punto mi possa aiutare.

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    non vorrei sbagliarmi ma mi pare che non si possano serializzare in automatico oggetti windows form

  7. #7
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Originariamente inviato da U235
    non vorrei sbagliarmi ma mi pare che non si possano serializzare in automatico oggetti windows form

    mi smentisco da solo http://msdn.microsoft.com/it-it/libr...serialize.aspx

  8. #8
    Comunque non stavo serializzando un ListViewItem, ma solo il suo tag. La lista Layers, infatti, è tipizzata su Layer, una classe serializzabile che ho scritto io.

  9. #9
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Originariamente inviato da Il Totem
    Comunque non stavo serializzando un ListViewItem, ma solo il suo tag. La lista Layers, infatti, è tipizzata su Layer, una classe serializzabile che ho scritto io.

    guarda, preferirei non addentrarmi nel discorso perchè non conosco bene vb, ma se vuoi mostrare il codice della Layer magari ne tiriamo fuori qualcosa.

  10. #10
    codice:
    <Serializable()> _
    Public Class Layer
        Inherits Item
    
        Private _Items As List(Of FillableItem)
        Private _Name As String
        Private _BgImage As BackgroundImage
        Private _Index As Int32
    
        Public ReadOnly Property Items() As List(Of FillableItem)
            Get
                Return _Items
            End Get
        End Property
    
        Public Property Name() As String
            Get
                Return _Name
            End Get
            Set(ByVal value As String)
                _Name = value
            End Set
        End Property
    
        Public Property BgImage() As BackgroundImage
            Get
                Return _BgImage
            End Get
            Set(ByVal value As BackgroundImage)
                _BgImage = value
            End Set
        End Property
    
        Public Property Index() As Int32
            Get
                Return _Index
            End Get
            Set(ByVal value As Int32)
                _Index = value
            End Set
        End Property
    
        Sub New()
            _Items = New List(Of FillableItem)
        End Sub
    
        Public Overrides Sub Draw(ByVal G As System.Drawing.Graphics)
            For Each I As Item In Me.Items
                I.Draw(G)
            Next
        End Sub
    End Class
    Item è una classe astratta che contiene solo i membri Draw e Color. FillableItem è un'altra classe astratta, derivata da Item, che contiene molte altre proprietà. Da FillableItem derivano due classi: una astratta, PointConnectionItem; e una normale pubblica Mix. Da PointConnectionItem derivano altre due classi normali, ClosedCurve e ClosedLine. BackgroundImage è una classe normale non derivata. Questo è uno schema di ereditariteà per il mio progetto:


    All'inizio pensavo l'errore fosse dovuto all'immagine, ma anche togliendola, persiste.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.