SerializationException war nicht behandelte: Der input-stream ist kein gültiges binäres format. Die Start-Inhalt (in bytes)
wirklich stecken, jede Hilfe und/oder Anregungen würde sehr geschätzt werden!
Ich geschrieben habe, eine Datenbank-Programm, das Sie benötigt, um zu laden, Inhalte aus einer Datei in eine Liste. Also grundsätzlich bin ich versucht zu verwenden Serialisierung und Deserialisierung. Der Bereich, wo der Fehler Auftritt, ist Fett und Kursiv gedruckt:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace ConsoleApplication1
{
class TheFile
{
//Version 1 serialiser, instance specific, so a bit of a pain
public void SerializeObject(string filename, TheDocument document)
{
Stream stream = File.Open(filename, FileMode.Create);
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, document);
stream.Close();
}
public TheDocument DeSerializeObject(string filename)
{
TheDocument document;
Stream stream = File.Open(filename, FileMode.Open);
BinaryFormatter bFormatter = new BinaryFormatter();
***document = (TheDocument)bFormatter.Deserialize(stream);***
stream.Close();
return document;
}
}
}
Die Fehlermeldung die ich erhalte ist wie folgt: Der input-stream ist kein gültiges binäres format. Die Start-Inhalt (in bytes) sind: 31-37-2F-30-39-2F-32-30-31-31-20-31-31-3A-30-36-3A ...
btw - hat die Fehler zeigen, die in der Datei-version? oder nur wenn es für eine Datenbank? wenn letzteres... was ist der code, schreibt/liest die BLOB? immer die BLOB-handling falsch, wenn im Gespräch mit einer Datenbank ist sehr verbreitet...
Das ist "17/09/2011 11:06:". Etwas hinzufügen des aktuellen Datums und der Uhrzeit der Datei. Haben Sie einen Blick-sehen, mit Editor prüfen Sie zunächst, den Dateinamen argument mit dem debugger weiter.
Das ist "17/09/2011 11:06:". Etwas hinzufügen des aktuellen Datums und der Uhrzeit der Datei. Haben Sie einen Blick-sehen, mit Editor prüfen Sie zunächst, den Dateinamen argument mit dem debugger weiter.
InformationsquelleAutor BigBug | 2011-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gesehen, diese an anderer Stelle berichten vor kurzem, und ich war nicht in der Lage eine Erklärung zu finden, es entweder. Den code so vorgestellt, wie es aussieht sollte in Ordnung sein (obwohl es wäre von großem nutzen, ein paar
using
Aussagen, aber Sie brechen nicht den Erfolg, da Sie den Aufruf.Close()
).Jedoch! Ich würde auch warnen, dass IMO
BinaryFormatter
ist nicht eine gute Wahl für die Speicherung in einer Datenbank, da die vermuten lässt, dass es wünschenswert ist, Lesen Sie es wieder in die Zukunft. Die Tatsache, dassBinaryFormatter
ist Typ-abhängig macht es sehr, sehr spröde, wie Sie die version Ihrer Anwendung. Alle: erstellen eines neuen app-version, umbenennen/hinzufügen/entfernen eines Feldes ändern einer Eigenschaft eine automatisch implementierte Eigenschaft, ändern .NET-version ändern-Plattform, ... könnte deine Daten sollten entweder nicht lesbar oder lesbar nur durch hinzufügen einer Menge von custom-binder-code.Ich stark vorschlagen, dass Sie erwägen, einen Vertrag-basierte Serialisierung statt
BinaryFormatter
; jede von:DataContractSerializer
(aber nichtNetDataContractSerializer
),XmlSerializer
,JavascriptSerializer
, JSON.Net. Wenn Sie möchten, binäre für Größe und Leistung, dann ist protocol buffers (mit einigen C# - Implementierungen, einschließlich protobuf-net) entwickelt (von Google) version tolerant, klein und schnell. Da, die Liste ist auch cross-Plattform, es bedeutet auch, dass Ihre Daten sicher sind, wenn Sie, sagen wir, switch-Plattform, Java, Mono, WinRT (die neue windows-8-subsystem), PHP, oder sonst was.BinaryFormatter
wird nicht Arbeit auf die.Auch, ich danke Ihnen SEHR für die Beratung über einen Vertrag-basierte Serialisierung!! Ich werde das definitiv tun!
Betonung auf "könnte" stellen Sie Ihre Daten unlesbar machen. Ich habe gerade getestet, das hinzufügen/entfernen von Feldern und stoßen assembly-version und BinaryFormatter gar nicht kümmern (neue Felder null, werden die Felder entfernt nicht die Ursache für eine Ausnahme, noch ändern assembly-version).
InformationsquelleAutor Marc Gravell
Tut dies gelingen?
Zu groß für einen Kommentar
InformationsquelleAutor Austin Salonen