Domanda

Sto provando a deserializzare uno stream ma ottengo sempre questo errore " End of Stream incontrato prima che l'analisi fosse completata " ;?

Ecco il codice:

        //Some code here
        BinaryFormatter b = new BinaryFormatter();
        return (myObject)b.Deserialize(s);//s---> is a Stream object that has been fill up with data some line over here

Qualcuno ha idee?

È stato utile?

Soluzione

Prova a impostare la posizione su 0 del tuo stream e non utilizzare l'oggetto ma il tipo di oggetto.

        BinaryFormatter b = new BinaryFormatter();
        s.Position = 0;
        return (YourObjectType)b.Deserialize(s);

Altri suggerimenti

Assicurati che la serializzazione sia stata completata e che il tipo di serializzazione corrisponda al tipo di deserializzazione (ovvero, assicurati di serializzare con un BinaryFormatter se stai deserializzando con uno). Inoltre, assicurati che lo stream che hai serializzato abbia terminato davvero la serializzazione, con Stream.Flush () o qualcosa in tal senso.

Ho avuto la stessa eccezione generata, fino a quando non ho aggiunto il tag [Serializable] alla classe che stavo serializzando :)

Quindi tutto ha funzionato perfettamente.

s.Position = 0;

questo perché devi tornare all'inizio per iniziare a copiare i dati sull'array!

Nel mio caso ho usato:

stream.Seek(0, SeekOrigin.Begin);

dopo aver serializzato il flusso e prima di deserializzare il flusso funziona in modo affascinante. spero che questo aiuti!

Ho appena riscontrato un errore simile

Si trattava di ottenere un diverso tipo di dati durante la serializzazione e la deserializzazione. Per errore, quando ho archiviato i dati su mariadb ho usato MediumText e quando ho ottenuto i dati che ho usato Text ecco perché ho ottenuto solo una parte del flusso.

Controlla solo se i tipi di dati sono uguali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top